1 题目
利用递归树来找出递归式T(n)=T(α n)+T((1-α)n)+cn的渐近紧确解,其中α是0<α<1的常数,且c是大于0的常数。
2 分析与解答
通过观察递归式,可知T(n)的递归树是二叉树,当α取不同值时,根节点的的两棵子树的高度是不同的。首先考虑1/2<=α<1的情况:
画出T(n)的递归树:
从递归树可以得出:
- 深度最浅的叶子的深度为logα(1/n);
- 深度最深的叶子的深度为log1-α(1/n);
- 第0层到第logα(1/n) - 1层各层的代价和为cn;
- 第logα(1/n)层到log1-α(1/n) - 1层各层的代价和小于cn;
- 第i(i < logα(1/n))层的结点数为2i;
- 从第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)。