【算法】递归式的时间复杂度小结

注:仅分析递归式

一、代入法

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

发布了96 篇原创文章 · 获赞 19 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Thera_qing/article/details/102910826