一. 度量一个程序(算法)执行时间的两种方法
1.事后统计的方法
这种方法可行,但有两个问题: 一是想要对设计的算法的运行性能进行评测,需要实际运行改程序; 二十所得时间的统计量依赖于计算机硬件, 软件等环境因素, 这种方式, 要在同一台计算机的相同状态下运行,才能比较哪个算法速度更快.
2.事前估算的方法
通过分析算法的时间复杂度来判断哪个算法更占优
二. 从时间频度到时间复杂度
1.时间频度
一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n),n表示语句的执行次数。
时间频度案例说明:
2.时间复杂度
前面提到的时间频度T(n)中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但有时我们想知道它变化时呈现什么规律,为此我们引入时间复杂度的概念。一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数,记作T(n)=O(f(n)),它称为算法的渐进时间复杂度,简称时间复杂度。
举例说明,寻找T(n)的同量级函数可以忽略常数项
横坐标为n,纵坐标为T(n), 执行次数n无限大时,不同常数项的Tn无限接近,说明f(n) = n 是T(n)的同量级函数,因此这些算法的时间复杂度同为O(n) .
举例说明,寻找T(n)的同量级函数可以忽略低次项
横坐标为n,纵坐标为T(n), 执行次数n无限大时,不同低次项及常数项的Tn最终将会无限接近,说明f(n) = n^2 是T(n)的同量级函数,因此这些算法的时间复杂度同为O(n^2) .
3.计算时间复杂度的方法
4. 平均时间复杂度和最坏时间复杂度
三. 常见的时间复杂度
1.常见的时间复杂度
常数阶 | O(1) |
对数阶 | O(logn) |
线性阶 | O(n) |
线性对数阶 | O(nlogn) |
平方阶 | O(n²) |
立方阶 | O(n³) |
k次方阶(k>3) | O(n^k) |
指数阶 | O(2ⁿ) |
阶乘阶 | O(n!) |
2.常见时间复杂度排序
说明:
(1)常见的时间复杂度由小到大依次为: O(1) < O(logn) < O(n) < O(nlogn) < O(n²) < O(n³) < O(n^k) < O(2ⁿ)
(2) 从图中可以看出,应尽量使用指数阶的算法
3.常见时间复杂度举例
(1)常数阶O(1)
(2) 对数阶 O(log2 n)
(3) 线性阶 O(n)
(4) 线性对数阶 O(nlogn)
(5)平方阶 O(n²)
来源:CSDN
作者:weixin_42232931
链接:https://blog.csdn.net/weixin_42232931/article/details/104214795