计算算法的时间复杂度

(一)概念:
时间频度:一个算法中的语句执行次数称为语句频度或时间频度;记为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 的。忽略低次项的影响。
这里写图片描述
(c)拿到算法的执行次数函数 T(n)后;因为函数的阶数对函数的增长速度的影响是最显著的,所以我们忽略与最高阶相乘的常数。
这里写图片描述
小结:
如果一个算法的执行次数是 T(n),那么只保留最高次项,同时忽略最高项的系数后得到函数 f(n),此时算法的时间复杂度就是 O(f(n))。
(3)常用的函数阶
n是趋向无穷大下的情况
(4)时间复杂度容易求出,但是时间频度不易求:
有更详细内容
(a)对于一个循环,假设循环体的时间复杂度为 O(n),循环次数为 m,则这个
循环的时间复杂度为 O(n×m)。
这里写图片描述
(b)对于多个循环,假设循环体的时间复杂度为 O(n),各个循环的循环次数分别是a, b, c…,则这个循环的时间复杂度为 O(n×a×b×c…)。分析的时候应该由里向外分析这些循环。
这里写图片描述
(3)对于顺序执行的语句或者算法,总的时间复杂度等于其中最大的时间复杂度。
这里写图片描述
此时时间复杂度为 max(O(n^2), O(n)),即 O(n^2)。
(4)对于条件判断语句,总的时间复杂度等于其中 时间复杂度最大的路径 的时间复杂度。
这里写图片描述
时间复杂度为 max(O(n^2), O(n)),即 O(n^2)。
以上对时间频度的推导借鉴此链接有更加详细讲解

猜你喜欢

转载自blog.csdn.net/weixin_40717096/article/details/80218260