递归算法的复杂度计算(常用的递归方程求解)
来源:互联网 发布:关于现代武器的软件 编辑:程序博客网 时间:2024/05/22 07:40
递归(recursion)算法的运行时间常用递归表达式表示。本文主要讲解如何从递归表达式求解出bigO时间复杂度。
例一:
T(n) = T(n-1)+1
解:T(n) = T(n-1)+1 = [T(n-2)+1]+1 = T(n-2)+2 = T(n-3)+3 = ... = T(n-n)+n = n
故 O(n) = n
例二:
T(n) = T(n-1)+n-1
解:T(n) = T(n-1)+n-1 = T(n-2)+(n-2)+(n-1) = T(n-3)+(n-3)+(n-2)+(n-1) = ...
= T(n-(n-1))+n-(n-1)+...+(n-2)+(n-1) = 0+1+2+3+4+...+(n-1) = n(n-1)/2
故 O(n) = n^2
例三:
T(n) = 2T(n-1)+1
解:T(n) = 2T(n-1)+1 = 2( 2T(n-2)+1)+1 = 4T(n-2)+2+1 = ...
= 2^(n-1)T(n-(n-1))+2^(n-2)+...2^2+2+1 = 2^(n-1)+2^(n-2)+...2^2+2+1=2^n-1
故O(n) = 2^n
例四:
T(n) = 2T(n/2)+n-1
解: T(n) = 2T(n/2)+n-1 = T(n) = 2(T(n) = 2T(n/4)+n/2-1)+n-1 = 4T(n/4)+2n-2-1 = 4(2T(n/8)+n/4-1)+2n-2-1
= 8T(n/8)+3n-4-2-1 = 2^k(T(n/(2^k)))+kn-2^(k-1)-...-4-2-1
令n=2^k
代入得:T(n) = (2^k)T(1)+k(2^k)-(2^(k-1)+...+4+2+1) = k(2^k)-((2^k)-1) = n(logn)-n+1
故 O(n)= n(logn)
总结以上四个常用递归关系表达式,其他的万变不离其宗了。
- 递归算法的复杂度计算(常用的递归方程求解)
- 递归算法时间复杂度的计算方程式一个递归方程:
- 递归方程的求解
- 递归算法的时间复杂度求解
- 递归树求解递归算法的时间复杂度
- 递归树求解递归算法的时间复杂度
- 递归树求解递归算法的时间复杂度
- 递归树求解递归算法的时间复杂度
- 递归算法的时间复杂度计算
- 利用递归树计算递归算法的复杂度
- 算法导论------递归算法的时间复杂度求解
- 递归算法的复杂度分析
- 递归算法复杂度的求法
- 递归算法的时间复杂度
- 递归算法的时间复杂度
- 递归算法的时间复杂度
- 递归式的时间复杂度的计算
- 递归方程的特征方程
- Spark初体验(配置超详细)
- 【转载】SpringMVC + Spring 3.2.14 + Hibernate 3.6.10 集成详解
- 中文学习资料
- 里氏代换原则
- app_zh_CN.properties
- 递归算法的复杂度计算(常用的递归方程求解)
- puppet 入口文件site.pp 和init.pp 的使用
- PHP中反引号应用
- 外观模式
- postman:模拟发送一个需要cookie认证的请求
- HashTable和HashMap区别
- React Component Lifecycle
- RCTDeviceEventEmitter 实现简单的观察者模式
- 快速幂运算