算法导论 4.2-5

1 题目

利用递归树来找出递归式T(n)=T(α n)+T((1-α)n)+cn的渐近紧确解,其中α是0<α<1的常数,且c是大于0的常数。

2 分析与解答

通过观察递归式,可知T(n)的递归树是二叉树,当α取不同值时,根节点的的两棵子树的高度是不同的。首先考虑1/2<=α<1的情况:

画出T(n)的递归树:


从递归树可以得出:

  1. 深度最浅的叶子的深度为logα(1/n);
  2. 深度最深的叶子的深度为log1-α(1/n);
  3. 第0层到第logα(1/n) - 1层各层的代价和为cn;
  4. 第logα(1/n)层到log1-α(1/n) - 1层各层的代价和小于cn;
  5. 第i(i < logα(1/n))层的结点数为2i;
  6. 从第logα(1/n)层开始各层的节点数小于2i。

根据上面的结论,首先推测T(n)的渐近下界:

由最浅的叶子的深度可以得到结论:

T(n) >= ∑i=0logα(1/n) - 1cn+Θ(2logα(1/n))=cnlgn / lg (1/α) + Θ (n1/ lg (1/α));

因为n1/ lg (1/α) > 0;所以猜测T(n)=Ω(nlg n)。

再推测T(n)的渐近上界:

由上面几条根据递归树得出的结论有:

T(n) <= ∑i=0log1-α(1/n) - 1cn +Θ(2log1-α(1/n) - 1) = cnlgn / lg (1/(1-α))+Θ(n1 /lg 1/(1 - α));

因为1 /lg 1/(1 - α) <= 1,所以存在n0 ,当n>=n0 时,有nlgn >= n^{1 /lg1/(1 - α)};

所以,有T(n) <= cnlgn / lg (1/(1-α)) + nlgn,所以猜测T(n)=O(nlgn)。

用代换法来证明推测:

根据推测渐近下界的过程,可以知道下界应该是正确的,只证明渐近上界。

若T(n)=O(nlgn)正确,则存在T(n) <= c0 nlgn,那么代入到T(n)中有:

T(n) <= c0 α n lg α n + c0 (1-α )n lg (1-α)n + cn = c0nlgn + c0 α n lg (α / 1- α) + c0 n lg (1- α) + cn;

对于多项式S(n) = c0 α n lg (α / 1- α) + c0 n lg (1- α) +cn,

因为α <= 1/2,所以S(n) <= 1/2*c0 n lg (α / 1- α) + c0 n lg (1- α) + cn= 1/2*c0 n lg α + 1/2*c0 n lg (1- α)+cn = 1/2*c0 n lg α(1-α) + cn;

显然,当c0 <= -2c/(lg α(1- α))时,1/2*c0 n lg α(1- α) +cn <= 0;

所以,当c0 <= -2c/(lg α(1- α))时,S(n) <= 0,此时可以得出T(n) <= c0nlg n,即,当c0 <= -2c/(lg α(1- α))时,有T(n)=O(nlgn);

综上得出T(n)=Θ(nlgn)。

对于0< α < 1/2的情况,递归树实际是1/2 <= α < 1情况的根的左右子树的交换,所以得到的结果是相同的;所以T(n)=Θ(nlgn)。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值