ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

深入理解时间复杂度

2022-07-03 13:37:16  阅读:186  来源: 互联网

标签:int 复杂度 算法 理解 时间 logn 深入 2n


时间复杂度 O(f(n))

算法需要执行基本运算的次数的
级别。


一,思考

目前个人认为:时间复杂度实际就是考量两种情况。

1. 循环 for(),while()

2. 递归

二,何为n

理论上指:问题规模。
拆开来说,就是for(),while()循环了n次,递归了多少次(递归的情况略微复杂)。

三,何为f(n)

算法执行基本运算的次数【基本运算(加减乘除)】

1. 举个例子

例一

int a , b = 0;//用于交换的临时变量
for(int i=0;i<n;i++){ // for循环共执行了n次
     a += b;  //执行"a += b"一次  
}

所以 f(n)= n * 1 = n。

例二

int a , b = 0;//用于交换的临时变量
for(int i=0;i<n;i++){ // for循环共执行了n次
     a += b;//执行"a += b"一次   
     a += b;//执行"a += b"一次  
}

所以 f(n)= n * (1 + 1)= 2n。

2. 总结

在复杂的程序也是这样计算f(n)。

四,什么是大O

我自己的理解:就是带有具体意义(耗费时间的程度)评级,就像 甲乙丙丁戊己庚辛壬癸。

1.时间复杂度概念理解

时间复杂度

a. 概念下的时间复杂度

大O用来表示上界的,这里的上界是极限的概念,即n -> ∞,当用它作为算法的最坏情况运行时间的上界.例如:图中的 插排,快排的最坏情况的时间复杂度。

b.实际面试情况下的说的时间复杂度

就是我们平时说的平均时间复杂度。

2.算法时间复杂的的排序

O(1)常数阶 < O(logn)对数阶 < O(n)线性阶 < O(n^2)平方阶 < O(n^3)立方阶 < O(2^n)指数阶

O(logn)中的log是以什么为底?

结论:我们统一说 logn,也就是忽略底数的描述。

证:假如有两个算法的时间复杂度,分别是log以2为底n的对数和log以10为底n的对数。
对数

3.总结

  1. 数据用例的不一样,时间复杂度也是不同的,理论上的数据用例是无穷大,而实际上可能是有限的数据用例,抛开数据规模谈复杂度就是耍流氓。

五.时间复杂度的计算(数据规模无穷大)

1. 求出f(n)

一行一行的去求,把结果加起来即可。

2. 化简f(n)

假设 f(n) = 2n^2 + 10n + 1000
首先 去掉加法常数项: f(n) = 2n^2 + 10n
然后 去掉常数系数 f(n) = n^2 + n
最后 去掉 低阶的项 f(n) = n^2 。
【也可以用提取n,然后去掉加法常数项的思路:f(n) = n*(n + 1)-> f(n) = n^2】

参考书目

《代码随想录》《算法笔记》 《数据结构与算法》

标签:int,复杂度,算法,理解,时间,logn,深入,2n
来源: https://www.cnblogs.com/the-travel-about-code/p/16439670.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有