(一)概念:

时间频度:一个算法中的语句执行次数称为语句频度或时间频度;记为T(n)。

时间复杂度:若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。*记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。*

例子:T(n) = n^2 - n + 4,则当n趋于无穷大时,f(n)/T(n)的极限是一个常数,f(n)= n^2即可;所以这个算法的时间复杂度是O(n^2)

(二)怎么样计算时间复杂度?

(a)拿到算法的执行次数函数 T(n);常数项并不影响函数的增长速度;所以当 T(n) = c,c 为一个常数的时候,我们说这个算法的时间复杂度为 O(1);如果 T(n) 不等于一个常数项时,直接将常数项省略。

例子

深度学习如何计算时间复杂度 算法时间复杂度怎么求_辅助函数


(b)拿到算法的执行次数函数 T(n)后;高次项对于函数的增长速度的影响是最大的。n^3 的增长速度是远超 n^2 的,同时 n^2 的增长速度是远超 n 的。忽略低次项的影响。

深度学习如何计算时间复杂度 算法时间复杂度怎么求_辅助函数_02


(c)拿到算法的执行次数函数 T(n)后;因为函数的阶数对函数的增长速度的影响是最显著的,所以我们忽略与最高阶相乘的常数。

深度学习如何计算时间复杂度 算法时间复杂度怎么求_辅助函数_03


小结:

如果一个算法的执行次数是 T(n),那么只保留最高次项,同时忽略最高项的系数后得到函数 f(n),此时算法的时间复杂度就是 O(f(n))。

(3)常用的函数阶

深度学习如何计算时间复杂度 算法时间复杂度怎么求_条件判断_04


(4)时间复杂度容易求出,但是时间频度不易求:

有更详细内容

(a)对于一个循环,假设循环体的时间复杂度为 O(n),循环次数为 m,则这个

循环的时间复杂度为 O(n×m)。

深度学习如何计算时间复杂度 算法时间复杂度怎么求_时间复杂度_05


(b)对于多个循环,假设循环体的时间复杂度为 O(n),各个循环的循环次数分别是a, b, c…,则这个循环的时间复杂度为 O(n×a×b×c…)。分析的时候应该由里向外分析这些循环。

深度学习如何计算时间复杂度 算法时间复杂度怎么求_时间复杂度_06


(3)对于顺序执行的语句或者算法,总的时间复杂度等于其中最大的时间复杂度。

深度学习如何计算时间复杂度 算法时间复杂度怎么求_辅助函数_07


此时时间复杂度为 max(O(n^2), O(n)),即 O(n^2)。

(4)对于条件判断语句,总的时间复杂度等于其中 时间复杂度最大的路径 的时间复杂度。

深度学习如何计算时间复杂度 算法时间复杂度怎么求_条件判断_08


时间复杂度为 max(O(n^2), O(n)),即 O(n^2)。

以上对时间频度的推导借鉴此链接有更加详细讲解