注:仅分析递归式
一、代入法
1、猜
2、证
3、解
举例:T(n) = 4T(n/2) + n, T(1) = Θ(1)
第一次猜: ·O(n^3)
则有:T(k) ≤ ck^3 for k < n
.
数学归纳法证明:T(n) ≤ cn^3
第二次猜O(n^2)
T(n)=4T(n/2)+n
≤4 c(n/2)2 +n=cn2+n
≤cn2
继续猜O(n^2lgn)
再证明……
所以这种方法主要是在递归式不适用于其他三种方法时才用,比较繁琐。
附:时间复杂度顺序:O(1) < O(logn) < O(n) < O(nlg(n)) < O(n^2) < O(n^2log(n)) < O(n^3) < O(2^n) <O(n!) < O(n^n)
二、递归树
画出递归树
例1 T(n) = T(n/4) + T(n/2) + n^2
递归树为:
所以T = n^2 * (1 + 5/16 + (5/16)^2 + (5/16)^3 + ……)
所以O(n^2)
例2 T(n)=T(αn)+T((1- α)n)+cn
所以递归树这种方法主要适用于一分为多的形式,形成完全树。
三、主定理/公式法
例 T(n) = aT(n/b) + f (n)
结论
比较f(n)
与n^log以b为底a的对数
用一个公式来表示有:
若有
则有:
例1、
例2、
例3、
所以公式法主要适用于 T(n) = aT(n/b) + f (n)
这种类型。
补充
对于aX(n)+bX(n-1)+cX(n-2)=0
类型的递归公式,如斐波那契数列
得到方程ar^2 + br + c = 0
解得方程的两个实根解r1和r2
若r1 == r2
则有X(n) = αr1^n + βr2^n
若r1 != r2
则有X(n) = αr^n + βnr ^n