码迷,mamicode.com
首页 > 其他好文 > 详细

时间复杂度

时间:2019-11-16 17:21:06      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:课堂   复杂度   限时   http   while   inf   for   情况   递归   

间复杂度的含义

它定性描述该算法的运行时间(度娘原话)

翻译成人话,就是程序的运行时间

时间复杂度的作用

举个栗子

几百年前,高斯巨佬还在上小学。一天,课堂乱哄哄的,老师灵机一动(脑子抽筋),布置了一道计算题——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

小结

这种能力无需特别培养,只要多刷题,多动动脑子,吃枣会自己理解

 

 

时间复杂度

标签:课堂   复杂度   限时   http   while   inf   for   情况   递归   

原文地址:https://www.cnblogs.com/HYDcn666/p/o_n.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!