算法导论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)\)

posted @ 2021-01-14 18:27  ijkzen  阅读(372)  评论(0编辑  收藏  举报