算法导论习题—主方法求渐进紧确界、递归树方法
算法导论习题—主方法求渐进紧确界、递归树方法
- 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,nlogba=nlog42=n0.5a=2,b=4,f(n)=1,n^{\log_ba}=n^{\log_42}=n^{0.5} a=2,b=4,f(n)=1,nlogba=nlog42=n0.5
对于常数ϵ=0.5\epsilon=0.5ϵ=0.5,有
f(n)=1=O(nlogba−ϵ)=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(nlogba−ϵ)=O(n0.5−0.5)=O(1)
符合主定理情况1,所以T(n)=Θ(nlogba)=Θ(n)T(n)=\Theta(n^{\log_ba})=\Theta(\sqrt{n})T(n)=Θ(nlogba)=Θ(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,nlogba=nlog42=na=2,b=4,f(n)=\sqrt{n},n^{\log_ba}=n^{\log_42}=\sqrt{n} a=2,b=4,f(n)=n,nlogba=nlog42=n
所以
f(n)=n=Θ(nlogba)=Θ(n)f(n)=\sqrt{n}=\Theta(n^{\log_ba})=\Theta(\sqrt{n}) f(n)=n=Θ(nlogba)=Θ(n)
符合主定理情况2,所以T(n)=Θ(nlogbalgn)=Θ(nlgn)T(n)=\Theta(n^{\log_ba}\lg{n})=\Theta(\sqrt{n}\lg{n})T(n)=Θ(nlogbalgn)=Θ(nlgn)。
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,nlogba=nlog42=na=2,b=4,f(n)=n,n^{\log_ba}=n^{\log_42}=\sqrt{n} a=2,b=4,f(n)=n,nlogba=nlog42=n
对于常数ϵ=12\epsilon=\frac{1}{2}ϵ=21,有f(n)=n=Ω(nlogba+ϵ)=Ω(n)f(n)=n=\Omega(n^{\log_ba+\epsilon})=\Omega(n)f(n)=n=Ω(nlogba+ϵ)=Ω(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,nlogba=nlog42=na=2,b=4,f(n)=n^2,n^{\log_ba}=n^{\log_42}=\sqrt{n} a=2,b=4,f(n)=n2,nlogba=nlog42=n
对于常数ϵ=32\epsilon=\frac{3}{2}ϵ=23,有f(n)=n2=Ω(nlogba+ϵ)=Ω(n2)f(n)=n^2=\Omega(n^{\log_ba+\epsilon})=\Omega(n^2)f(n)=n2=Ω(nlogba+ϵ)=Ω(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)=n2lgn≠Θ(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)=n2lgn,nlogba=nlog24=n2a=4,b=2,f(n)=n^{2}\lg{n},n^{\log_ba}=n^{\log_24}=n^2a=4,b=2,f(n)=n2lgn,nlogba=nlog24=n2
n2lgnn^2\lg{n}n2lgn渐进大于f(n)f(n)f(n),但它不是多项式意义上的大于。对于任意正常数ϵ,f(n)/nlogba=(n2lgn)/n2=lgn\epsilon,f(n)/n^{\log_ba}=(n^2\lg{n})/n^2=\lg{n}ϵ,f(n)/nlogba=(n2lgn)/n2=lgn均渐进小于nϵn^\epsilonnϵ。
因此主方法不能应用于此递归式。
创建上述递归式的对应递归树如下
在递归树中,深度为iii的结点对应规模为n/2in / 2^ in/2i。当n/2i=1n / 2 ^i = 1n/2i=1时,即i=log2ni=\log_2ni=log2n时,子问题规模变为111,对应叶结点T(1)T(1)T(1),因此递归树高度为log2n\log_2nlog2n,有log2n+1\log_2n+1log2n+1层。
每层的结点数都是上一层的444倍,因此深度为iii 的结点数为4i4^i4i。深度为iii的结点对应规模为n/2in/2^in/2i的子问题。因为每一层子问题规模都是上一层的1/41/41/4,所以对i=0,1,2,…,log2n−1i=0,1,2,…,\log_2{n-1}i=0,1,2,…,log2n−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,…,log2n−1i=0,1,2,…,\log_2{n-1}i=0,1,2,…,log2n−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$,有4log2n=n24^{\log_2n}=n^24log2n=n2个结点,每个结点的代价为T(1)T(1)T(1),总代价为n2n^2n2,即Θ(n2)\Theta(n^2)Θ(n2),确定整棵树的代价:
T(n)=n2lgn+n2lgn2+…+Θ(n2)=∑i=0log2n−1n2lg(n2i)+Θ(n2)=12n2lg2n+Θ(n2)=O(n2lg2n)\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∑log2n−1n2lg(2in)+Θ(n2)=21n2lg2n+Θ(n2)=O(n2lg2n)
由此,对于原始递归式推导出一个猜测T(n)=O(n2lg2n)T(n)=O(n^2\lg^2n)T(n)=O(n2lg2n)。使用代入法验证猜测,即验证T(n)=O(n2lg2n)T(n)=O(n^2\lg^2n)T(n)=O(n2lg2n)是递归式T(n)=4T(n/2)+n2lgnT(n) = 4T(n/2) + n^2{\lg}nT(n)=4T(n/2)+n2lgn的一个上界。即要证明:存在正常数ccc,使得T(n)≤cn2lg2nT(n)\leq{cn^2\lg^2n}T(n)≤cn2lg2n对足够大的nnn都成立。
n=1n=1n=1时,T(1)=1,cn2lg2n=0T(1)=1,cn^2\lg^2n=0T(1)=1,cn2lg2n=0,ccc取任何值T(n)≤cn2lg2nT(n)\leq{cn^2\lg^2n}T(n)≤cn2lg2n均不成立
n=2n=2n=2时,T(2)=4T(1)+12lg1=4T(2)=4T(1)+1^2\lg{1}=4T(2)=4T(1)+12lg1=4,令c≥1c\geq1c≥1即可使T(n)≤cn2lg2nT(n)\leq{cn^2\lg^2n}T(n)≤cn2lg2n
n≥3n\geq3n≥3时,假设T(n)≤cn2lg2nT(n)\leq{cn^2\lg^2n}T(n)≤cn2lg2n对n=3,4,…,nn=3,4,…,nn=3,4,…,n均成立,则有
T(n)=4T(n/2)+n2lgn≤4c(n2)2lg2n2+n2lgn=cn2(lgn−lg2)2+n2lgn=cn2lg2n−2cn2lg(2+n)+n2lgn+cn2lg22≤cn2lg2n\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
即证明cn2lg2n−2cn2lg(2+n)+n2lgn+cn2lg22≤cn2lg2ncn^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成立。
对上式进行变换
lgn2lg(2+n)−lg22=12lg2−lg22lgn≤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−lgnlg221≤c
n≥3n\geq3n≥3时,12lg2−lg22lgn\cfrac{1}{2\lg2-\cfrac{\lg^22}{\lg{n}}}2lg2−lgnlg221是单调递减的,并且n=3n=3n=3时取得最大值12lg2−lg22lg3\cfrac{1}{2\lg2-\cfrac{\lg^22}{\lg{3}}}2lg2−lg3lg221。结合n=1,n=2n=1,n=2n=1,n=2的情况,可知存在一个正常数ccc,使得T(n)≤cn2lg2nT(n)\leq{cn^2\lg^2n}T(n)≤cn2lg2n对足够大的nnn都成立。
因此递归式的一个上界为T(n)=O(n2lg2n)T(n)=O(n^2\lg^2n)T(n)=O(n2lg2n)。
主定理另一种形式
对上述问题,《算法导论》中给出的主定理无法求解,但如下形式的主定理可以求解,其符合下述主定理的的第二种情况。
因为
for k=1≥0f(n)=n2lgn=Θ(n2lg1n)=Θ(n2lg2n)\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,存在一个上界Θ(n2lg2n)\Theta(n^2\lg^2 n)Θ(n2lg2n)
算法导论习题—主方法求渐进紧确界、递归树方法相关推荐
- 算法导论 — 4.4 用递归树方法求解递归式
笔记 在应用代入法求解递归式时,需要事先做出一个好的猜测.然而,有时候做出好的猜测是很困难的,此时可以考虑采用递归树方法.在递归树中,每个结点表示一个单一子问题的代价.创建递归树之后,对树的每层的各子 ...
- 用递归树方法求解递归式
用递归树方法求解递归式 [备注:需要修改] 一个递归算法的递归式:T(n)=3T(n/4)+cn2T\left(n\right)=3T\left(n/4\right)+cn^2T(n)=3T(n/4) ...
- 算法导论习题,思考题题解博主录
算法导论最好结合课后习题来看,以查漏补缺,检验自己对知识的掌握和理解水平 我在看的过程中,参考了以下博主的博客 http://blog.csdn.net/longhuihu?viewmode=cont ...
- 算法导论习题—二叉搜索树、红黑树、区间树
算法基础习题-二叉搜索树.红黑树.区间树 1.二叉搜索树: 2.红黑树: 3.区间树: 1.二叉搜索树: 设 T T T是一棵二叉搜索树,其关键字互不相同;设 x x x是一个叶结点, y y y为其 ...
- 算法导论习题C.2-9答案
题目:你参加一个游戏.该游戏将奖品藏在了三个幕布之后.如果你选对了幕布,则可以赢得奖品.在你选择了一个幕布后,但是幕布还没有揭开之前,支持人会揭开另两个幕布中的一个空幕布(支持人知道哪个幕布后是空的) ...
- 第四章 分治策略 4.4 用递归树方法求解递归式
4.4 用递归数方法求解递归式 一. 1. 在递归树中,每个结点表示一个单一子问题的代价,子问题对应某次递归函数调用.我们将树中每层中的代价求和,得到每层代价,然后将所有层的代价求和,得到所有层次 ...
- 求递归算法时间复杂度:递归树
引用自:http://www.cnblogs.com/wu8685/archive/2010/12/21/1912347.html 递归算法时间复杂度的计算方程式一个递归方程: 在引入递归树之前可以考 ...
- 算法导论 习题24.2-4 amp; 24.3-6 单源最短路径问题
24.2-4:给出一个高效算法来统计邮箱无回路图中的全部路径数.分析所给出的算法. 24.3-6:设G=(V,E)为带权有向图,权函数W: E-> {0,1,....,W},其中W为某非负整数. ...
- 算法导论习题解答 16-1 (找零问题)
考虑用最少的硬币找nnn美分零钱的问题.假定每种硬币的面额都是整数. a. 设计贪心算法求解找零问题,假定有25美分.10美分.5美分和1美分4中面额的硬币.证明你的算法能找到最优解. b. 假定硬币 ...
最新文章
- 分享九款构建响应式网站的最佳PHP框架
- ieee期刊_IEEE期刊的双栏排版中的图片位置问题
- python内置数据结构_Python基础知识2-内置数据结构(下)
- Job for virtualbox.service failed because the control process exited with error
- Linux-Android启动之zImage生成过程详解
- 找出二维数组中每行的最小数但最小数的列不能相同
- 阿里云朱照远:边缘计算,无处不在
- USACO-Section2.1 Sorting a Three-Valued Sequence(排序)
- 使用python搭配pandoc实现html批量转word
- asp.net在ie7中使用FileUpload上传前预览图片
- 移动物联卡资费标准是如何的
- VFP+6.0中文版教程--初级教程
- mcal rtm_RTM的完整形式是什么?
- 树莓派 与 Xbox360手柄 基于pygame 的一次邂逅
- 漫谈程序员系列:请区别对待女程序员
- RGB颜色对照表(全)
- tensorrt遇到torch.bmm的解决
- php开发俄罗斯方块,HTML5+JS实现俄罗斯方块原理及具体步骤_html5教程技巧
- classloder
- C++ 实时显示7z压缩与解压缩的进度