由数据范围反推算法复杂度以及算法内容

发布时间 2023-04-05 14:57:53作者: bujidao1128

由数据范围反推算法复杂度以及算法内容

1、一般ACM或者笔试题的时间限制是1秒或2秒。

  • C++里面如果题目的时间限制是1s的话,这个1s是指每一个测试数据都有1s的时间限制,如果一个题有十几个测试数据,每一个测试数据都有1s的实现,正常比赛的话,比如蓝桥杯比赛的话,如果有10个测试数据,时间限制是1s的话,它指的也是每一个数据都是1s的实现,10个数据就可以跑10s。(不是总共算的)
  • 力扣平台是所有数据共用一个时间,对于竞赛来说就不是很规范。
  • 正常比赛的时候,如果C++时间限制是要求1s过的话,JAVA在2s内过就可以,JAVA一般会乘个倍数,Python也会乘个倍数。例如C++时间限制要求是1s,那么JAVA时间限制要求就是2s,Python时间限制要求就是1.5s或者2s,Go语言的话是1.5倍,JS的话是3倍(JS在3s内过就可以,一般都是这样的)

另外,空间也是这样的,如果空间是64MB,那么也是对应每个数据是64MB,C和C++是64MB,JAVA是128MB以内就可以

2、在这种情况下,C++代码中的操作次数控制在 10^7 ∼ 10^8 为最佳。(10^7 是一千万,10^8 是一个亿)

  • 如果常数比较小的话,也不是说超过一个亿就一定会TLE,比如说从1枚举的两亿,计算前两亿数的和,那么也不会超时,因为常数很小。
  • 10^7 ∼ 10^8指的是时间复杂度是多少,大概是这个级别,如果超过一点,也问题不会太大,但是一般的题目,现在的算法题,出题人一般都会将最优解的时间复杂度控制到一千万左右,一般都会这样,除非这个题目常数太小了,才有可能放到一个亿。(注意,1s是一个亿,如果这个题的时间限制是5s的话,就是五个亿都可以过)

3、下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择:

后面给出了不同数据范围的情况下,一般最优解的时间复杂度是多少,这是一个经验。例如第5个,如果一个题目给出的数据范围是100000,一般来讲这个题目的最优解是o(nlogn),这个是一般来讲,并不是所有情况,是80%的情况是这样的。

来源:https://www.acwing.com/blog/content/32/