时间复杂度
Posted hydcn666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时间复杂度相关的知识,希望对你有一定的参考价值。
时间复杂度的含义
它定性描述该算法的运行时间(度娘原话)
翻译成人话,就是程序的运行时间
时间复杂度的作用
举个栗子
几百年前,高斯巨佬还在上小学。一天,课堂乱哄哄的,老师灵机一动(脑子抽筋),布置了一道计算题——1+2+…+100=?
一般人都暴力计算,老师也不例外,1+2=3,3+3=6...4950+100=5050
假设这是一个程序,其时间复杂度为O(N)
for (int i=1;i<=n;i++) sum+=i;
而高斯却不同寻常,马上得出了结果
Sum = 1+...+100
Sum =100+...+ 1
2Sum=101*100
Sum=5050
假设这是一个程序,其时间复杂度为O(1)
sum=(1+n)*n/2;
假如你是正常人,你肯定会采用后者
因为,后者更快
程序也是如此,算的辣么慢,还要程序员有何用
很大程度上,时间复杂度决定了算法的优劣
判断时间复杂度
看懂了时间复杂度,还要去掌握
O(1)
sum+=1; /*即使语句再多,固定运行次数的都算O(1)*/
O(n)
for (int i=1;i<=n;i++){}
O(n^2)
for (int i=1;i<=n;i++) for (int j=1;j<=n;j++){}
O(log n)
while(i<n){i*=2;}
O(2^n)
/*双重选择的递归*/
那么,一个程序的时间复杂度就是所有部分时间复杂度总和吗?
并不是
通常,我们只保留最高阶项,且舍弃系数
接下来,就该比较一下了
O(1)<O(log n)<O(n)<O(n log n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
在大部分OJ中,限时为1S
O(1),O(log n),O(n),O(n log n)绝对不超时
在许多情况下,O(n^2)是最优方法,也会通过
毕竟很多算法时间复杂度就是O(n^2)
O(n^3)偶尔也能通过
O(2^n),O(n!),O(n^n)想都别想,绝对TLE
小结
这种能力无需特别培养,只要多刷题,多动动脑子,吃枣会自己理解
以上是关于时间复杂度的主要内容,如果未能解决你的问题,请参考以下文章