知识回顾_算法_递归式复杂度分析
注:均为以前的零碎读书笔记重新整理而来,资料参考大多来自《算法导论》等算法书和网上资料。
-
代换法
观察递归式,猜测解的形式,然后用数学归纳法来找出真正有效的常数,证明猜测的解正确。
例:
设解为:,则有
当c>=1时有:
检验当n=1时,是否满足解,T(1)=1,而c1lg1=0,因此不满足边界条件,因此我们假设改为对于n>=n0(n0是常数),证明,用T(2)来代替T(1)作为边界条件,使n0=2;c>=1,当c取到足够大的常数。
-
递归树法
代换法猜解难度比较大,依赖经验,因此可以用递归树来求解。没有代换法严谨,因此可以用递归树得出解,再用代换法来证明:
例:
递归树:
递归树的解等于每一层的之和相加
画递归树:
推出以下递归树:
对于递归树:
1. 先看它的深度:从这个递归树来看,问题大小为n,问题每次分为n/4;不断划分,直到1,则是求k值:k就是深度。
2. 叶子结点有多少?由树可以看出树每次划分3个子结点,i层的结点的数量为3i;所以叶子结点数为:;每个叶子结点代价为T(1);所以叶子结点总代价为
求递归树的解,每一层的和再相加:
解为:
因为有:
而等比数列有性质:(来源wiki)
当时,等比数列无限项之和
由于当及 n 的值不断增加时,qn的值便会不断减少而且趋于0,因此无限项之和:
所以:
3.主方法
三种情况都把f(n)和比较,谁最大谁作为解的主导。
注意的是:
什么是多项式小于/大于?
就是f(x)/g(x)的值大于或是小于一个多项式,定义如下:
多项式大于:
多项式小于:
主方法的应用:
T(n)=9T(n/3)+n
a=9,b=3;f(n)=n; f(n)多项式小于,所以T(n)=O(n^2)
T(n)=3T(n/4)+nlgn
,对于规则性条件:
满足第三种情况,因此T(n)=O(nlgn)
T(n)=T(2n/3)+1
主方法(主定理)不是什么递归式都可以适用。不符合多项式大于或小于就应该返回用递归树方法了。