算法导论 4-3 递归式 T(n)=2T(n/2)+n/lgn的复杂度求解

 我来答
舒适还明净的海鸥i
2022-06-12 · TA获得超过1.7万个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:69.9万
展开全部
     在阅读算法导论第四章的时候,求解一些递归式的复杂度时,遇到了一些问题,因此将思路分享一下。

     首先对于可以用主方法求解的形式,这里不再说明,符合主方法的三种情况只要套用公式即可得到正确答案。关于主方法使用递归树法进行证明,算法导论上已经解释的很详细,感兴趣可以参考一下。

    在练习题 4.6-2 中提到了    , 其中   ,要求证明主递归式的的解为  

    以   为例,很明显不符合主方法的条件,因为第三章讲到过  ,那么可以考虑使用递归树法,进行求解,然后再使用代入法进行数学归纳法的证明。

    首先递归树高度为  (书中  以2为底,而不是10),叶节点数量为  ,即数量为n,每个叶节点复杂度为  ,因此叶节点总的复杂度为 

    然后计算中间节点包括根节点的复杂度,每一层有   个子节点

    

    接下来计算等差数列之和即可

              

        

即   

总的复杂度 

     因此可以很清楚的看到,由于递归树的每层代价类似,最后结果多出来的   可以认为树的总层数进行累加的结果。

    下面使用代入法验证该结论,由于证明渐近上界与证明渐近下界的过程类似,因此只证明上界。

    设 

    则,

得证,其中 

    在思考题 4-3中 有类似   形式的递归式存在,其解为  ,有些解答认为是   实际上并不准确。

    同样这种形式也不符合主方法的条件,同样使用递归树法进行近似的求解,然后再使用代入法证明答案的正确性。

    在计算这个递归式需要使用一些调和级数的知识,在算法导论的附录A中有公式 A.7,调和级数求和的证明需要使用到积分的定理,这里就不赘述了。

    同样,首先计算叶节点的复杂度,同上 叶节点数量为  ,即每个叶节点复杂度为  ,总的复杂度为 

    接下来计算中间节点包括根节点的复杂度,同上,一共有  层,各层之和为

        

这里的累加项不再是一个等比数列,而是一个调和级数,即为

所以可以看出进行多出一次对数运算的原因在于分数的累加,因此总的复杂度 

同样,下面使用代入法证明结果的正确性,因为证明步骤类似,这里也只证明渐近上界为  , 设 ,所以有

下面证明  ,为了证明的简便,我们假设n为2的幂次,即  ,则

对于极限  ,那么有

于是,得证  
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式