知识回顾_算法_递归式复杂度分析

知识回顾_算法_递归式复杂度分析

注:均为以前的零碎读书笔记重新整理而来,资料参考大多来自《算法导论》等算法书和网上资料。

  1. 代换法

    观察递归式,猜测解的形式,然后用数学归纳法来找出真正有效的常数,证明猜测的解正确。


    设解为:,则有


    当c>=1时有:

检验当n=1时,是否满足解,T(1)=1,而c1lg1=0,因此不满足边界条件,因此我们假设改为对于n>=n0(n0是常数),证明,用T(2)来代替T(1)作为边界条件,使n0=2;c>=1,当c取到足够大的常数

  1. 递归树法

    代换法猜解难度比较大,依赖经验,因此可以用递归树来求解。没有代换法严谨,因此可以用递归树得出解,再用代换法来证明:

    例:

    递归树:

    递归树的解等于每一层的之和相加

    画递归树:


    推出以下递归树:



    对于递归树:

    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


主方法(主定理)不是什么递归式都可以适用。不符合多项式大于或小于就应该返回用递归树方法了。

posted @ 2012-03-21 12:53  xfate  阅读(356)  评论(0编辑  收藏  举报