4.5-1

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

解:

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

根据主定理

a = 2 , b = 4 , f ( n ) = 1 , n log ⁡ b a = n log ⁡ 4 2 = n 0.5 a=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 ( n log ⁡ b a − ϵ ) = O ( n 0.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.50.5)=O(1)

符合主定理情况1,所以 T ( n ) = Θ ( n log ⁡ b a ) = Θ ( n ) T(n)=\Theta(n^{\log_ba})=\Theta(\sqrt{n}) T(n)=Θ(nlogba)=Θ(n )

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

根据主定理
a = 2 , b = 4 , f ( n ) = n , n log ⁡ b a = n log ⁡ 4 2 = n a=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 = Θ ( n log ⁡ b a ) = Θ ( n ) f(n)=\sqrt{n}=\Theta(n^{\log_ba})=\Theta(\sqrt{n}) f(n)=n =Θ(nlogba)=Θ(n )
符合主定理情况2,所以 T ( n ) = Θ ( n log ⁡ b a lg ⁡ n ) = Θ ( n lg ⁡ n ) T(n)=\Theta(n^{\log_ba}\lg{n})=\Theta(\sqrt{n}\lg{n}) T(n)=Θ(nlogbalgn)=Θ(n lgn)

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

根据主定理
a = 2 , b = 4 , f ( n ) = n , n log ⁡ b a = n log ⁡ 4 2 = n a=2,b=4,f(n)=n,n^{\log_ba}=n^{\log_42}=\sqrt{n} a=2,b=4,f(n)=n,nlogba=nlog42=n
对于常数 ϵ = 1 2 \epsilon=\frac{1}{2} ϵ=21,有 f ( n ) = n = Ω ( n log ⁡ b a + ϵ ) = Ω ( n ) f(n)=n=\Omega(n^{\log_ba+\epsilon})=\Omega(n) f(n)=n=Ω(nlogba+ϵ)=Ω(n),且对于 1 2 ≤ c < 1 \frac{1}{2}\leq{c}\lt1 21c<1,满足:
a f ( n / b ) = 2 f ( n / 4 ) = 2 ∗ n 4 = n 2 ≤ c f ( n ) = c n af(n/b)=2f(n/4)=2\ast\frac{n}{4}=\frac{n}{2}\leq{cf(n)=cn} af(n/b)=2f(n/4)=24n=2ncf(n)=cn
符合主定理情况3,所以 T ( n ) = Θ ( f ( n ) ) = Θ ( n ) T(n)=\Theta(f(n))=\Theta(n) T(n)=Θ(f(n))=Θ(n)

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

根据主定理
a = 2 , b = 4 , f ( n ) = n 2 , n log ⁡ b a = n log ⁡ 4 2 = n a=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
对于常数 ϵ = 3 2 \epsilon=\frac{3}{2} ϵ=23,有 f ( n ) = n 2 = Ω ( n log ⁡ b a + ϵ ) = Ω ( n 2 ) f(n)=n^2=\Omega(n^{\log_ba+\epsilon})=\Omega(n^2) f(n)=n2=Ω(nlogba+ϵ)=Ω(n2),且对于 1 8 ≤ c < 1 \frac{1}{8}\leq{c}\lt1 81c<1,满足
a f ( n / b ) = 2 f ( n / 4 ) = 2 ∗ n 2 16 = n 2 8 ≤ c f ( n ) = c n af(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)=216n2=8n2cf(n)=cn
符合主定理情况3,所以 T ( n ) = Θ ( f ( n ) ) = Θ ( n 2 ) T(n)=\Theta(f(n))=\Theta(n^2) T(n)=Θ(f(n))=Θ(n2)

4.5-4

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

因为
f ( n ) = n 2 lg ⁡ n ≠ Θ ( n 2 ) ≠ O ( n 2 − ϵ ) ≠ Ω ( n 2 + ϵ ) 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 ) = n 2 lg ⁡ n , n log ⁡ b a = n log ⁡ 2 4 = n 2 a=4,b=2,f(n)=n^{2}\lg{n},n^{\log_ba}=n^{\log_24}=n^2 a=4,b=2,f(n)=n2lgn,nlogba=nlog24=n2
n 2 lg ⁡ n n^2\lg{n} n2lgn渐进大于 f ( n ) f(n) f(n),但它不是多项式意义上的大于。

对于任意正常数 ϵ , f ( n ) / n log ⁡ b a = ( n 2 lg ⁡ n ) / n 2 = lg ⁡ n \epsilon,f(n)/n^{\log_ba}=(n^2\lg{n})/n^2=\lg{n} ϵ,f(n)/nlogba=(n2lgn)/n2=lgn均渐进小于 n ϵ n^\epsilon nϵ

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

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

在这里插入图片描述

​ 在递归树中,深度为 i i i的结点对应规模为 n / 2 i n / 2^ i n/2i。当 n / 2 i = 1 n / 2 ^i = 1 n/2i=1时,即 i = log ⁡ 2 n i=\log_2n i=log2n时,子问题规模变为 1 1 1,对应叶结点 T ( 1 ) T(1) T(1),因此递归树高度为 log ⁡ 2 n \log_2n log2n,有 log ⁡ 2 n + 1 \log_2n+1 log2n+1层。
​ 每层的结点数都是上一层的 4 4 4倍,因此深度为 i i i 的结点数为 4 i 4^i 4i。深度为 i i i的结点对应规模为 n / 2 i n/2^i n/2i的子问题。因为每一层子问题规模都是上一层的 1 / 4 1/4 1/4,所以对 i = 0 , 1 , 2 , … , log ⁡ 2 n − 1 i=0,1,2,…,\log_2{n-1} i=0,1,2,,log2n1,深度为 i i i的每个结点的代价为 ( n / 2 i ) 2 ∗ lg ⁡ ( n / 2 i ) (n/2^i)^2\ast\lg(n/2^i) (n/2i)2lg(n/2i)。因此对于对 i = 0 , 1 , 2 , … , log ⁡ 2 n − 1 i=0,1,2,…,\log_2{n-1} i=0,1,2,,log2n1,深度为 i i i的所有结点的总代价为 4 i ( n / 2 i ) 2 ∗ lg ⁡ ( n / 2 i ) = n 2 ∗ lg ⁡ ( n / 2 i ) 4^i(n/2^i)^2\ast\lg(n/2^i)=n^2\ast\lg(n/2^i) 4i(n/2i)2lg(n/2i)=n2lg(n/2i)。树的最底层深度为$ \log_2n$,有 4 log ⁡ 2 n = n 2 4^{\log_2n}=n^2 4log2n=n2个结点,每个结点的代价为 T ( 1 ) T(1) T(1),总代价为 n 2 n^2 n2,即 Θ ( n 2 ) \Theta(n^2) Θ(n2),确定整棵树的代价:
T ( n ) = n 2 lg ⁡ n + n 2 lg ⁡ n 2 + … + Θ ( n 2 ) = ∑ i = 0 log ⁡ 2 n − 1 n 2 lg ⁡ ( n 2 i ) + Θ ( n 2 ) = 1 2 n 2 lg ⁡ 2 n + Θ ( n 2 ) = O ( n 2 lg ⁡ 2 n ) \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=0log2n1n2lg(2in)+Θ(n2)=21n2lg2n+Θ(n2)=O(n2lg2n)
​ 由此,对于原始递归式推导出一个猜测 T ( n ) = O ( n 2 lg ⁡ 2 n ) T(n)=O(n^2\lg^2n) T(n)=O(n2lg2n)。使用代入法验证猜测,即验证 T ( n ) = O ( n 2 lg ⁡ 2 n ) T(n)=O(n^2\lg^2n) T(n)=O(n2lg2n)是递归式 T ( n ) = 4 T ( n / 2 ) + n 2 lg ⁡ n T(n) = 4T(n/2) + n^2{\lg}n T(n)=4T(n/2)+n2lgn的一个上界。即要证明:存在正常数 c c c,使得 T ( n ) ≤ c n 2 lg ⁡ 2 n T(n)\leq{cn^2\lg^2n} T(n)cn2lg2n对足够大的 n n n都成立。

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

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

n ≥ 3 n\geq3 n3时,假设 T ( n ) ≤ c n 2 lg ⁡ 2 n T(n)\leq{cn^2\lg^2n} T(n)cn2lg2n n = 3 , 4 , … , n n=3,4,…,n n=3,4,,n均成立,则有
T ( n ) = 4 T ( n / 2 ) + n 2 lg ⁡ n ≤ 4 c ( n 2 ) 2 lg ⁡ 2 n 2 + n 2 lg ⁡ n = c n 2 ( lg ⁡ n − lg ⁡ 2 ) 2 + n 2 lg ⁡ n = c n 2 lg ⁡ 2 n − 2 c n 2 lg ⁡ ( 2 + n ) + n 2 lg ⁡ n + c n 2 l g 2 2 ≤ c n 2 lg ⁡ 2 n \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)+n2lgn4c(2n)2lg22n+n2lgn=cn2(lgnlg2)2+n2lgn=cn2lg2n2cn2lg(2+n)+n2lgn+cn2lg22cn2lg2n
​ 即证明 c n 2 lg ⁡ 2 n − 2 c n 2 lg ⁡ ( 2 + n ) + n 2 lg ⁡ n + c n 2 l g 2 2 ≤ c n 2 lg ⁡ 2 n cn^2\lg^2{n}-2cn^2\lg(2+n)+n^2\lg{n}+cn^2lg^22\leq{cn^2\lg^2n} cn2lg2n2cn2lg(2+n)+n2lgn+cn2lg22cn2lg2n对某个常数 c > 0 c>0 c>0成立。

对上式进行变换
lg ⁡ n 2 lg ⁡ ( 2 + n ) − l g 2 2 = 1 2 lg ⁡ 2 − lg ⁡ 2 2 lg ⁡ 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=2lg2lgnlg221c

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

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

主定理另一种形式

对上述问题,《算法导论》中给出的主定理无法求解,但如下形式的主定理可以求解,其符合下述主定理的的第二种情况。
在这里插入图片描述
因为
for k=1≥0 f ( n ) = n 2 lg ⁡ n = Θ ( n 2 lg ⁡ 1 n ) = Θ ( n 2 lg ⁡ 2 n ) \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)
所以符合情况 2 2 2,存在一个上界 Θ ( n 2 lg ⁡ 2 n ) \Theta(n^2\lg^2 n) Θ(n2lg2n)

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐