算法导论习题—主方法求渐进紧确界、递归树方法

  • 4.5-1
    • a. T(n)=2T(n/4)+1T ( n ) = 2 T ( n / 4 ) + 1T(n)=2T(n/4)+1
    • b. T(n)=2T(n/4)+nT ( n ) = 2 T ( n / 4 ) +\sqrt{n}T(n)=2T(n/4)+n​
    • c. T(n)=2T(n/4)+nT ( n ) = 2 T ( n / 4 ) + nT(n)=2T(n/4)+n
    • d. T(n)=2T(n/4)+n2T ( n ) = 2T( n / 4 ) + n ^2T(n)=2T(n/4)+n2
  • 4.5-4
  • 主定理另一种形式

4.5-1

对下列递归式,使用主方法求出渐进紧确界

解:

a. T(n)=2T(n/4)+1T ( n ) = 2 T ( n / 4 ) + 1T(n)=2T(n/4)+1

根据主定理

a=2,b=4,f(n)=1,nlog⁡ba=nlog⁡42=n0.5a=2,b=4,f(n)=1,n^{\log_ba}=n^{\log_42}=n^{0.5} a=2,b=4,f(n)=1,nlogb​a=nlog4​2=n0.5
对于常数ϵ=0.5\epsilon=0.5ϵ=0.5,有
f(n)=1=O(nlog⁡ba−ϵ)=O(n0.5−0.5)=O(1)f(n)=1=O(n^{\log_ba-\epsilon})=O(n^{0.5-0.5})=O(1) f(n)=1=O(nlogb​a−ϵ)=O(n0.5−0.5)=O(1)

符合主定理情况1,所以T(n)=Θ(nlog⁡ba)=Θ(n)T(n)=\Theta(n^{\log_ba})=\Theta(\sqrt{n})T(n)=Θ(nlogb​a)=Θ(n​)。

b. T(n)=2T(n/4)+nT ( n ) = 2 T ( n / 4 ) +\sqrt{n}T(n)=2T(n/4)+n​

根据主定理
a=2,b=4,f(n)=n,nlog⁡ba=nlog⁡42=na=2,b=4,f(n)=\sqrt{n},n^{\log_ba}=n^{\log_42}=\sqrt{n} a=2,b=4,f(n)=n​,nlogb​a=nlog4​2=n​
所以
f(n)=n=Θ(nlog⁡ba)=Θ(n)f(n)=\sqrt{n}=\Theta(n^{\log_ba})=\Theta(\sqrt{n}) f(n)=n​=Θ(nlogb​a)=Θ(n​)
符合主定理情况2,所以T(n)=Θ(nlog⁡balg⁡n)=Θ(nlg⁡n)T(n)=\Theta(n^{\log_ba}\lg{n})=\Theta(\sqrt{n}\lg{n})T(n)=Θ(nlogb​algn)=Θ(n​lgn)。

c. T(n)=2T(n/4)+nT ( n ) = 2 T ( n / 4 ) + nT(n)=2T(n/4)+n

根据主定理
a=2,b=4,f(n)=n,nlog⁡ba=nlog⁡42=na=2,b=4,f(n)=n,n^{\log_ba}=n^{\log_42}=\sqrt{n} a=2,b=4,f(n)=n,nlogb​a=nlog4​2=n​
对于常数ϵ=12\epsilon=\frac{1}{2}ϵ=21​,有f(n)=n=Ω(nlog⁡ba+ϵ)=Ω(n)f(n)=n=\Omega(n^{\log_ba+\epsilon})=\Omega(n)f(n)=n=Ω(nlogb​a+ϵ)=Ω(n),且对于12≤c<1\frac{1}{2}\leq{c}\lt121​≤c<1,满足:
af(n/b)=2f(n/4)=2∗n4=n2≤cf(n)=cnaf(n/b)=2f(n/4)=2\ast\frac{n}{4}=\frac{n}{2}\leq{cf(n)=cn} af(n/b)=2f(n/4)=2∗4n​=2n​≤cf(n)=cn
符合主定理情况3,所以T(n)=Θ(f(n))=Θ(n)T(n)=\Theta(f(n))=\Theta(n)T(n)=Θ(f(n))=Θ(n)。

d. T(n)=2T(n/4)+n2T ( n ) = 2T( n / 4 ) + n ^2T(n)=2T(n/4)+n2

根据主定理
a=2,b=4,f(n)=n2,nlog⁡ba=nlog⁡42=na=2,b=4,f(n)=n^2,n^{\log_ba}=n^{\log_42}=\sqrt{n} a=2,b=4,f(n)=n2,nlogb​a=nlog4​2=n​
对于常数ϵ=32\epsilon=\frac{3}{2}ϵ=23​,有f(n)=n2=Ω(nlog⁡ba+ϵ)=Ω(n2)f(n)=n^2=\Omega(n^{\log_ba+\epsilon})=\Omega(n^2)f(n)=n2=Ω(nlogb​a+ϵ)=Ω(n2),且对于18≤c<1\frac{1}{8}\leq{c}\lt181​≤c<1,满足
af(n/b)=2f(n/4)=2∗n216=n28≤cf(n)=cnaf(n/b)=2f(n/4)=2\ast\frac{n^2}{16}=\frac{n^2}{8}\leq{cf(n)=cn} af(n/b)=2f(n/4)=2∗16n2​=8n2​≤cf(n)=cn
符合主定理情况3,所以T(n)=Θ(f(n))=Θ(n2)T(n)=\Theta(f(n))=\Theta(n^2)T(n)=Θ(f(n))=Θ(n2)。

4.5-4

主方法能应用于递归式T(n)=4T(n/2)+n2lgnT(n) = 4T(n/2) + n^2{\mathrm{lg}}nT(n)=4T(n/2)+n2lgn吗?请说明为什么可以或者为什么不可以。给出这个递归式的一个渐进上界。
《算法导论》中给出如下形式的主定理

因为
f(n)=n2lg⁡n≠Θ(n2)≠O(n2−ϵ)≠Ω(n2+ϵ)f(n)=n^2\lg n≠\Theta(n^2)≠O(n^{2−ϵ})≠Ω(n^{2+ϵ}) f(n)=n2lgn=Θ(n2)=O(n2−ϵ)=Ω(n2+ϵ)
不满足上述三种情况的任何一种

a=4,b=2,f(n)=n2lg⁡n,nlog⁡ba=nlog⁡24=n2a=4,b=2,f(n)=n^{2}\lg{n},n^{\log_ba}=n^{\log_24}=n^2a=4,b=2,f(n)=n2lgn,nlogb​a=nlog2​4=n2
n2lg⁡nn^2\lg{n}n2lgn渐进大于f(n)f(n)f(n),但它不是多项式意义上的大于。

对于任意正常数ϵ,f(n)/nlog⁡ba=(n2lg⁡n)/n2=lg⁡n\epsilon,f(n)/n^{\log_ba}=(n^2\lg{n})/n^2=\lg{n}ϵ,f(n)/nlogb​a=(n2lgn)/n2=lgn均渐进小于nϵn^\epsilonnϵ。

因此主方法不能应用于此递归式。

创建上述递归式的对应递归树如下

​ 在递归树中,深度为iii的结点对应规模为n/2in / 2^ in/2i。当n/2i=1n / 2 ^i = 1n/2i=1时,即i=log⁡2ni=\log_2ni=log2​n时,子问题规模变为111,对应叶结点T(1)T(1)T(1),因此递归树高度为log⁡2n\log_2nlog2​n,有log⁡2n+1\log_2n+1log2​n+1层。
​ 每层的结点数都是上一层的444倍,因此深度为iii 的结点数为4i4^i4i。深度为iii的结点对应规模为n/2in/2^in/2i的子问题。因为每一层子问题规模都是上一层的1/41/41/4,所以对i=0,1,2,…,log⁡2n−1i=0,1,2,…,\log_2{n-1}i=0,1,2,…,log2​n−1,深度为iii的每个结点的代价为(n/2i)2∗lg⁡(n/2i)(n/2^i)^2\ast\lg(n/2^i)(n/2i)2∗lg(n/2i)。因此对于对i=0,1,2,…,log⁡2n−1i=0,1,2,…,\log_2{n-1}i=0,1,2,…,log2​n−1,深度为iii的所有结点的总代价为4i(n/2i)2∗lg⁡(n/2i)=n2∗lg⁡(n/2i)4^i(n/2^i)^2\ast\lg(n/2^i)=n^2\ast\lg(n/2^i)4i(n/2i)2∗lg(n/2i)=n2∗lg(n/2i)。树的最底层深度为$ \log_2n$,有4log⁡2n=n24^{\log_2n}=n^24log2​n=n2个结点,每个结点的代价为T(1)T(1)T(1),总代价为n2n^2n2,即Θ(n2)\Theta(n^2)Θ(n2),确定整棵树的代价:
T(n)=n2lg⁡n+n2lg⁡n2+…+Θ(n2)=∑i=0log⁡2n−1n2lg⁡(n2i)+Θ(n2)=12n2lg⁡2n+Θ(n2)=O(n2lg⁡2n)\begin{aligned} T(n)&=n^2\lg{n}+n^2\lg{\frac{n}{2}}+…+\Theta(n^2)\\ &=\sum_{i=0}^{\log_2{n-1}}n^2\lg(\frac{n}{2^i})+\Theta(n^2)\\ &=\frac{1}{2}n^2\lg^2n+\Theta(n^2)\\ &=O(n^2\lg^2n) \end{aligned} T(n)​=n2lgn+n2lg2n​+…+Θ(n2)=i=0∑log2​n−1​n2lg(2in​)+Θ(n2)=21​n2lg2n+Θ(n2)=O(n2lg2n)​
​ 由此,对于原始递归式推导出一个猜测T(n)=O(n2lg⁡2n)T(n)=O(n^2\lg^2n)T(n)=O(n2lg2n)。使用代入法验证猜测,即验证T(n)=O(n2lg⁡2n)T(n)=O(n^2\lg^2n)T(n)=O(n2lg2n)是递归式T(n)=4T(n/2)+n2lg⁡nT(n) = 4T(n/2) + n^2{\lg}nT(n)=4T(n/2)+n2lgn的一个上界。即要证明:存在正常数ccc,使得T(n)≤cn2lg⁡2nT(n)\leq{cn^2\lg^2n}T(n)≤cn2lg2n对足够大的nnn都成立。

n=1n=1n=1时,T(1)=1,cn2lg⁡2n=0T(1)=1,cn^2\lg^2n=0T(1)=1,cn2lg2n=0,ccc取任何值T(n)≤cn2lg⁡2nT(n)\leq{cn^2\lg^2n}T(n)≤cn2lg2n均不成立

n=2n=2n=2时,T(2)=4T(1)+12lg⁡1=4T(2)=4T(1)+1^2\lg{1}=4T(2)=4T(1)+12lg1=4,令c≥1c\geq1c≥1即可使T(n)≤cn2lg⁡2nT(n)\leq{cn^2\lg^2n}T(n)≤cn2lg2n

n≥3n\geq3n≥3时,假设T(n)≤cn2lg⁡2nT(n)\leq{cn^2\lg^2n}T(n)≤cn2lg2n对n=3,4,…,nn=3,4,…,nn=3,4,…,n均成立,则有
T(n)=4T(n/2)+n2lg⁡n≤4c(n2)2lg⁡2n2+n2lg⁡n=cn2(lg⁡n−lg⁡2)2+n2lg⁡n=cn2lg⁡2n−2cn2lg⁡(2+n)+n2lg⁡n+cn2lg22≤cn2lg⁡2n\begin{aligned} T(n)&=4T(n/2)+n^2\lg{n}\\ &\leq4c(\frac{n}{2})^2\lg^2\frac{n}{2}+n^2\lg{n}\\ &=cn^2(\lg{n}-\lg{2})^2+n^2\lg{n}\\ &=cn^2\lg^2{n}-2cn^2\lg(2+n)+n^2\lg{n}+cn^2lg^22\\ &\leq{cn^2\lg^2n} \end{aligned} T(n)​=4T(n/2)+n2lgn≤4c(2n​)2lg22n​+n2lgn=cn2(lgn−lg2)2+n2lgn=cn2lg2n−2cn2lg(2+n)+n2lgn+cn2lg22≤cn2lg2n​
​ 即证明cn2lg⁡2n−2cn2lg⁡(2+n)+n2lg⁡n+cn2lg22≤cn2lg⁡2ncn^2\lg^2{n}-2cn^2\lg(2+n)+n^2\lg{n}+cn^2lg^22\leq{cn^2\lg^2n}cn2lg2n−2cn2lg(2+n)+n2lgn+cn2lg22≤cn2lg2n对某个常数c>0c>0c>0成立。

对上式进行变换
lg⁡n2lg⁡(2+n)−lg22=12lg⁡2−lg⁡22lg⁡n≤c\begin{aligned} \cfrac{\lg{n}}{2\lg(2+n)-lg^22}= \frac{1}{2\lg2-\cfrac{\lg^22}{\lg{n}}}\leq{c} \end{aligned} 2lg(2+n)−lg22lgn​=2lg2−lgnlg22​1​≤c​

n≥3n\geq3n≥3时,12lg⁡2−lg⁡22lg⁡n\cfrac{1}{2\lg2-\cfrac{\lg^22}{\lg{n}}}2lg2−lgnlg22​1​是单调递减的,并且n=3n=3n=3时取得最大值12lg⁡2−lg⁡22lg⁡3\cfrac{1}{2\lg2-\cfrac{\lg^22}{\lg{3}}}2lg2−lg3lg22​1​。结合n=1,n=2n=1,n=2n=1,n=2的情况,可知存在一个正常数ccc,使得T(n)≤cn2lg⁡2nT(n)\leq{cn^2\lg^2n}T(n)≤cn2lg2n对足够大的nnn都成立。

因此递归式的一个上界为T(n)=O(n2lg⁡2n)T(n)=O(n^2\lg^2n)T(n)=O(n2lg2n)。

主定理另一种形式

对上述问题,《算法导论》中给出的主定理无法求解,但如下形式的主定理可以求解,其符合下述主定理的的第二种情况。

因为
for k=1≥0f(n)=n2lg⁡n=Θ(n2lg⁡1n)=Θ(n2lg⁡2n)\text{for k=1≥0}\\ f(n)=n^2\lg n=\Theta(n^2\lg^1 n)=\Theta(n^2\lg^2 n) for k=1≥0f(n)=n2lgn=Θ(n2lg1n)=Θ(n2lg2n)
所以符合情况222,存在一个上界Θ(n2lg⁡2n)\Theta(n^2\lg^2 n)Θ(n2lg2n)

算法导论习题—主方法求渐进紧确界、递归树方法相关推荐

  1. 算法导论 — 4.4 用递归树方法求解递归式

    笔记 在应用代入法求解递归式时,需要事先做出一个好的猜测.然而,有时候做出好的猜测是很困难的,此时可以考虑采用递归树方法.在递归树中,每个结点表示一个单一子问题的代价.创建递归树之后,对树的每层的各子 ...

  2. 用递归树方法求解递归式

    用递归树方法求解递归式 [备注:需要修改] 一个递归算法的递归式:T(n)=3T(n/4)+cn2T\left(n\right)=3T\left(n/4\right)+cn^2T(n)=3T(n/4) ...

  3. 算法导论习题,思考题题解博主录

    算法导论最好结合课后习题来看,以查漏补缺,检验自己对知识的掌握和理解水平 我在看的过程中,参考了以下博主的博客 http://blog.csdn.net/longhuihu?viewmode=cont ...

  4. 算法导论习题—二叉搜索树、红黑树、区间树

    算法基础习题-二叉搜索树.红黑树.区间树 1.二叉搜索树: 2.红黑树: 3.区间树: 1.二叉搜索树: 设 T T T是一棵二叉搜索树,其关键字互不相同;设 x x x是一个叶结点, y y y为其 ...

  5. 算法导论习题C.2-9答案

    题目:你参加一个游戏.该游戏将奖品藏在了三个幕布之后.如果你选对了幕布,则可以赢得奖品.在你选择了一个幕布后,但是幕布还没有揭开之前,支持人会揭开另两个幕布中的一个空幕布(支持人知道哪个幕布后是空的) ...

  6. 第四章 分治策略 4.4 用递归树方法求解递归式

    4.4 用递归数方法求解递归式 一. 1.   在递归树中,每个结点表示一个单一子问题的代价,子问题对应某次递归函数调用.我们将树中每层中的代价求和,得到每层代价,然后将所有层的代价求和,得到所有层次 ...

  7. 求递归算法时间复杂度:递归树

    引用自:http://www.cnblogs.com/wu8685/archive/2010/12/21/1912347.html 递归算法时间复杂度的计算方程式一个递归方程: 在引入递归树之前可以考 ...

  8. 算法导论 习题24.2-4 amp; 24.3-6 单源最短路径问题

    24.2-4:给出一个高效算法来统计邮箱无回路图中的全部路径数.分析所给出的算法. 24.3-6:设G=(V,E)为带权有向图,权函数W: E-> {0,1,....,W},其中W为某非负整数. ...

  9. 算法导论习题解答 16-1 (找零问题)

    考虑用最少的硬币找nnn美分零钱的问题.假定每种硬币的面额都是整数. a. 设计贪心算法求解找零问题,假定有25美分.10美分.5美分和1美分4中面额的硬币.证明你的算法能找到最优解. b. 假定硬币 ...

最新文章

  1. 分享九款构建响应式网站的最佳PHP框架
  2. ieee期刊_IEEE期刊的双栏排版中的图片位置问题
  3. python内置数据结构_Python基础知识2-内置数据结构(下)
  4. Job for virtualbox.service failed because the control process exited with error
  5. Linux-Android启动之zImage生成过程详解
  6. 找出二维数组中每行的最小数但最小数的列不能相同
  7. 阿里云朱照远:边缘计算,无处不在
  8. USACO-Section2.1 Sorting a Three-Valued Sequence(排序)
  9. 使用python搭配pandoc实现html批量转word
  10. asp.net在ie7中使用FileUpload上传前预览图片
  11. 移动物联卡资费标准是如何的
  12. VFP+6.0中文版教程--初级教程
  13. mcal rtm_RTM的完整形式是什么?
  14. 树莓派 与 Xbox360手柄 基于pygame 的一次邂逅
  15. 漫谈程序员系列:请区别对待女程序员
  16. RGB颜色对照表(全)
  17. tensorrt遇到torch.bmm的解决
  18. php开发俄罗斯方块,HTML5+JS实现俄罗斯方块原理及具体步骤_html5教程技巧
  19. classloder
  20. C++ 实时显示7z压缩与解压缩的进度

热门文章

  1. 解决chrome提示您的连接不是私密连接的方法
  2. live2d(Web SDK 4.x)Web看板娘进阶
  3. 我更新了博客看板娘 | 小埋UMR
  4. 云原生容器安全之安全狗对云原生集群网络流量可观测性的思考
  5. win7远程桌面如何退出全屏或全屏切换
  6. ubuntu 16.04 samba服务搭建
  7. SecureCRT 8中文包
  8. UE4离线开发环境部署(UE4 + VS + VIVE + SteamVR)
  9. VScode配置glsl环境
  10. 20140302培训感悟