算法导论习题—主方法求渐进紧确界、递归树方法
对上述问题,《算法导论》中给出的主定理无法求解,但如下形式的主定理可以求解,其符合下述主定理的的第二种情况。树的最底层深度为$ \log_2n$,有。《算法导论》中给出如下形式的主定理。,但它不是多项式意义上的大于。因此主方法不能应用于此递归式。创建上述递归式的对应递归树如下。每层的结点数都是上一层的。的情况,可知存在一个正常数。个结点,每个结点的代价为。符合主定理情况1,所以。符合主定理情况2
算法导论习题—主方法求渐进紧确界、递归树方法
- 4.5-1
- a. T ( n ) = 2 T ( n / 4 ) + 1 T ( n ) = 2 T ( n / 4 ) + 1 T(n)=2T(n/4)+1
- b. T ( n ) = 2 T ( n / 4 ) + n T ( n ) = 2 T ( n / 4 ) +\sqrt{n} T(n)=2T(n/4)+n
- c. T ( n ) = 2 T ( n / 4 ) + n T ( n ) = 2 T ( n / 4 ) + n T(n)=2T(n/4)+n
- d. T ( n ) = 2 T ( n / 4 ) + n 2 T ( n ) = 2T( n / 4 ) + n ^2 T(n)=2T(n/4)+n2
- 4.5-4
- 主定理另一种形式
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.5−0.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)=Θ(nlgn)。
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
21≤c<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)=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 ) = 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
81≤c<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)=2∗16n2=8n2≤cf(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,…,log2n−1,深度为
i
i
i的每个结点的代价为
(
n
/
2
i
)
2
∗
lg
(
n
/
2
i
)
(n/2^i)^2\ast\lg(n/2^i)
(n/2i)2∗lg(n/2i)。因此对于对
i
=
0
,
1
,
2
,
…
,
log
2
n
−
1
i=0,1,2,…,\log_2{n-1}
i=0,1,2,…,log2n−1,深度为
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)2∗lg(n/2i)=n2∗lg(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=0∑log2n−1n2lg(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 c≥1即可使 T ( n ) ≤ c n 2 lg 2 n T(n)\leq{cn^2\lg^2n} T(n)≤cn2lg2n
n
≥
3
n\geq3
n≥3时,假设
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)+n2lgn≤4c(2n)2lg22n+n2lgn=cn2(lgn−lg2)2+n2lgn=cn2lg2n−2cn2lg(2+n)+n2lgn+cn2lg22≤cn2lg2n
即证明
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}
cn2lg2n−2cn2lg(2+n)+n2lgn+cn2lg22≤cn2lg2n对某个常数
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=2lg2−lgnlg221≤c
n ≥ 3 n\geq3 n≥3时, 1 2 lg 2 − lg 2 2 lg n \cfrac{1}{2\lg2-\cfrac{\lg^22}{\lg{n}}} 2lg2−lgnlg221是单调递减的,并且 n = 3 n=3 n=3时取得最大值 1 2 lg 2 − lg 2 2 lg 3 \cfrac{1}{2\lg2-\cfrac{\lg^22}{\lg{3}}} 2lg2−lg3lg221。结合 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)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)