算法导论4-4
读书笔记
本章主要讲解了使用递归树方法求解递归式;
在递归树中,每个节点表示一个单一子问题的代价,子问题对应某次递归函数调用。我们将树中每层中的代价求和,得到每层代价,然后将所有曾的代价求和,得到所有层次的递归调用的总代价。
递归树适合用来生成好的猜测,然后可用代入法来验证猜测是否正确,但是在某种程度上,递归树法可能不够精确;
课后练习
由于本次课后练习的题目相似性较高,所以这里只做两题,第一和最后一道题
4.4-1
对递归式\(T(n)=3T(\lfloor n/2 \rfloor) + n\),利用递归树确定一个好的渐近上界,用代入法进行验证。
上面是递归树,其中第\(i\)层有\(3^i\)个节点,每个节点的代价是\((\frac{1}{2})^in\),所以叶子节点的代价为\(3^{\log_2^n}\),即\(n^{\log_2^3}\);
所以总代价为:
\[\begin{aligned}
T(n)&=c\sum_{i=0}^{\log_2^n-1}(\frac{3}{2})^in + \theta(n^{\log_2^3}) \\[2ex]
&=cn \ast \frac{(\frac{3}{2})^{\log_2^n}-1}{\frac{3}{2}-1} + \theta(n^{\log_2^3}) \\[2ex]
&=2cn\ast {(\frac{3}{2})^{\log_2^n}} - 2cn + \theta(n^{\log_2^3})\\[2ex]
&=2cn^{\log_2^3} - 2cn + \theta(n^{\log_2^3})\\[2ex]
&=\theta(n^{\log_2^3})
\end{aligned}
\]
证明略
4.4-9
对递归式\(T(n)=T(\alpha n)+T((1-\alpha)n)+cn\),利用递归树给出一个渐近紧确解,其中\(0<\alpha<1\)和\(c>0\)是常数。
一共有\(\log_{min(1/\alpha ,1/(1-\alpha))}^{cn}\),每层代价为\(cn\),所以总代价为\(O(n\lg^n)\)