算法运行超时预估算
我们知道算法超时评判一般会要求运行时间小于1秒。
所以我们怎么知道自己的算法是否超时了呢?
看个例子:
#include <stdio.h> #include <iostream> #include <ctime> using namespace std; int main() { clock_t startTime,endTime; startTime = clock();//计时开始 //下句实例表示执行次数O(n),我们通过查看n=10000000清楚循环执行10的7次方,从而大概判断是否会超出竞赛要求时长。 for(int i=0;i<10000000;)i++; endTime = clock();//计时结束 cout<<"执行时间:"<<(double)(endTime-startTime)/CLOCKS_PER_SEC<<"s"<<endl; return 0; }
我们看到for循环了10000次,循环中执行i++操作(我们也可以执行除打印输出的时间复杂度为O(1)的其他语句),那1秒能执行多少次这样的语句呢?
O(1)的范围比较难估算,但不会超过109
对应O(n)的范围为106 - 108;
对应O(n2)的范围为103 - 104;
对应O(n3)的范围为101 - 102。。。。。。
当我们了解了这些之后,就不难知道自己的算法是否会超时了。