4.4 用递归数方法求解递归式
一.
1.
在递归树中,每个结点表示一个单一子问题的代价,子问题对应某次递归函数调用。我们将树中每层中的代价求和,得到每层代价,然后将所有层的代价求和,得到所有层次的递归调用的总代价。
递归树最适合用来生成好的猜测,然后即可用代入法来验证猜测是都正确。当使用递归树来生成好的猜测时,常常需要忍受一点儿“不精确”,因为稍后才会验证猜测是否正确。如果在画递归树和代价求和时非常仔细,就可以用递归树直接证明解是否正确。
2.
以递归式
T
(
n
)
=
3
T
(
⌊
n
/
4
⌋
)
+
c
n
2
T(n)=3T(\lfloor n/4\rfloor)+cn^2
T(n)=3T(⌊n/4⌋)+cn2 为例,如图所示:
二.
4.4-1
对递归式 T ( n ) = 3 T ( ⌊ n / 2 ⌋ ) + n T(n)=3T(\lfloor n/2\rfloor)+n T(n)=3T(⌊n/2⌋)+n ,利用递归树确定一个好的渐近上界,用代入法进行验证。
解:图略。递归树的层数为:
lg
n
+
1
\lg n +1
lgn+1 ,
第
i
i
i 层的代价符合通式:
(
3
/
2
)
i
−
1
n
(3/2)^{i-1}n
(3/2)i−1n ,
叶子的树目为
n
lg
3
n^{\lg 3}
nlg3 ,
猜测渐近上界为
O
(
n
lg
3
)
O(n^{\lg3})
O(nlg3) ,下面使用代入法证明:
当
n
=
1
n = 1
n=1,
T
(
1
)
=
1
≤
1
lg
3
T(1) = 1 ≤ 1^{\lg3}
T(1)=1≤1lg3 。
假设当
n
<
m
n < m
n<m 时,
T
(
n
)
≤
c
n
lg
3
−
d
n
T(n) ≤ cn^{\lg 3}-dn
T(n)≤cnlg3−dn ,那么当
n
=
m
n=m
n=m 时,
T
(
m
)
=
3
T
(
⌊
m
2
⌋
)
+
m
≤
3
c
⌊
m
2
⌋
lg
3
−
3
d
⌊
m
2
⌋
+
m
≤
3
c
(
m
2
)
lg
3
−
3
d
m
2
+
m
=
c
m
lg
3
+
(
1
−
3
d
2
)
m
≤
c
m
lg
3
−
d
m
取d≥2
\begin{aligned}T(m)&=3T(\lfloor\frac{m}{2}\rfloor)+m\\ &≤3c\lfloor\frac{m}{2}\rfloor^{\lg3}-3d\lfloor\frac{m}{2}\rfloor+m\\ &≤3c(\frac{m}{2})^{\lg3}-\frac{3dm}{2}+m\\ &=cm^{\lg3}+(1-\frac{3d}{2})m\\ &≤cm^{\lg3}-dm&\text{取d≥2} \end{aligned}
T(m)=3T(⌊2m⌋)+m≤3c⌊2m⌋lg3−3d⌊2m⌋+m≤3c(2m)lg3−23dm+m=cmlg3+(1−23d)m≤cmlg3−dm取d≥2 综上,渐近上界为
O
(
n
lg
3
)
O(n^{\lg3})
O(nlg3) 。
4.4-2
对递归式 T ( n ) = T ( n / 2 ) + n 2 T(n)=T(n/2)+n^2 T(n)=T(n/2)+n2 ,利用递归树确定一个好的渐近上界,用代入法进行验证。
解:图略。递归树的层数为:
lg
n
+
1
\lg n +1
lgn+1 ,
第
i
i
i 层的代价符合通式:
(
1
/
4
)
i
−
1
n
2
(1/4)^{i-1}n^2
(1/4)i−1n2 ,
叶子的树目为
1
1
1 ,
猜测渐近上界为
O
(
n
2
)
O(n^{2})
O(n2) ,下面使用代入法证明:
当
n
=
1
n = 1
n=1,
T
(
1
)
=
1
≤
1
2
T(1) = 1 ≤ 1^{2}
T(1)=1≤12 。
假设当
n
<
m
n < m
n<m 时,
T
(
n
)
≤
c
n
2
T(n) ≤ cn^2
T(n)≤cn2 ,那么当
n
=
m
n=m
n=m 时,
T
(
m
)
=
T
(
m
2
)
+
m
2
≤
c
(
m
2
)
2
+
m
2
=
(
c
4
+
1
)
m
2
≤
c
m
2
取c ≥ 4/3
\begin{aligned}T(m)&=T(\frac{m}{2})+m^2\\ &≤c(\frac{m}{2})^2+m^2\\ &=(\frac{c}{4}+1)m^2\\ &≤cm^2&\text{取c ≥ 4/3} \end{aligned}
T(m)=T(2m)+m2≤c(2m)2+m2=(4c+1)m2≤cm2取c ≥ 4/3 综上,渐近上界为
O
(
n
2
)
O(n^2)
O(n2) 。
4.4-3
对递归式 T ( n ) = 4 T ( n / 2 + 2 ) + n T(n)=4T(n/2+2)+n T(n)=4T(n/2+2)+n ,利用递归树确定一个好的渐近上界,用代入法进行验证。
解:图略。递归树的层数为:
lg
n
+
1
\lg n +1
lgn+1 ,
第
i
i
i 层的代价估计后符合通式:
2
i
−
1
(
n
+
2
i
)
2^{i-1}(n+2^i)
2i−1(n+2i) ,
叶子的树目为
n
2
n^2
n2 ,
猜测渐近上界为
O
(
n
2
)
O(n^{2})
O(n2) ,下面使用代入法证明:
当
n
=
1
n = 1
n=1,
T
(
1
)
=
1
≤
1
2
T(1) = 1 ≤ 1^{2}
T(1)=1≤12 。
假设当
n
<
m
n < m
n<m 时,
T
(
n
)
≤
c
n
2
T(n) ≤ cn^2
T(n)≤cn2 ,那么当
n
=
m
n=m
n=m 时,
T
(
m
)
=
T
(
m
2
+
2
)
+
m
≤
c
(
m
2
+
2
)
2
+
m
≤
c
m
2
取c ≥ 0
\begin{aligned}T(m)&=T(\frac{m}{2}+2)+m\\ &≤c(\frac{m}{2}+2)^2+m\\ &≤cm^2&\text{取c ≥ 0} \end{aligned}
T(m)=T(2m+2)+m≤c(2m+2)2+m≤cm2取c ≥ 0 综上,渐近上界为
O
(
n
2
)
O(n^2)
O(n2) 。
4.4-4
对递归式 T ( n ) = T ( n − 1 ) + 1 T(n)=T(n-1)+1 T(n)=T(n−1)+1 ,利用递归树确定一个好的渐近上界,用代入法进行验证。
解:图略。递归树的层数为:
n
n
n ,
第
i
i
i 层的代价估计后符合通式:
1
1
1 ,
叶子的树目为
1
1
1 ,
猜测渐近上界为
O
(
n
)
O(n)
O(n) ,下面使用代入法证明:
当
n
=
1
n = 1
n=1,
T
(
1
)
=
1
≤
1
T(1) = 1 ≤ 1
T(1)=1≤1 。
假设当
n
<
m
n < m
n<m 时,
T
(
n
)
≤
c
n
T(n) ≤ cn
T(n)≤cn ,那么当
n
=
m
n=m
n=m 时,
T
(
m
)
=
T
(
m
−
1
)
+
1
≤
c
(
m
−
1
)
+
1
≤
c
m
取c ≥ 1
\begin{aligned}T(m)&=T(m-1)+1\\ &≤c(m-1)+1\\ &≤cm&\text{取c ≥ 1} \end{aligned}
T(m)=T(m−1)+1≤c(m−1)+1≤cm取c ≥ 1 综上,渐近上界为
O
(
n
)
O(n)
O(n) 。
4.4-5
对递归式 T ( n ) = T ( n − 1 ) + T ( n / 2 ) + n T(n)=T(n-1)+T(n/2)+n T(n)=T(n−1)+T(n/2)+n ,利用递归树确定一个好的渐近上界,用代入法进行验证。
解:图略。递归树不是完全树。递归树的层数为:
n
n
n ,
猜测渐近上界为
O
(
2
n
)
O(2^n)
O(2n) ,渐近下界为
Ω
(
n
2
)
\Omega(n^2)
Ω(n2) ,下面使用代入法证明:
当
n
=
1
n = 1
n=1,
1
2
≤
T
(
1
)
=
1
≤
2
1
1^2≤T(1) = 1 ≤ 2^{1}
12≤T(1)=1≤21 。
假设当
n
<
m
n < m
n<m 时,
T
(
n
)
≤
c
2
n
−
4
n
T(n) ≤ c2^n-4n
T(n)≤c2n−4n ,那么当
n
=
m
n=m
n=m 时,
T
(
m
)
=
T
(
m
−
1
)
+
T
(
m
2
)
+
m
≤
c
2
m
−
1
−
4
(
m
−
1
)
+
c
2
m
2
−
2
m
+
m
≤
c
2
m
−
4
m
取m ≥ 2
\begin{aligned}T(m)&=T(m-1)+T(\frac{m}{2})+m\\ &≤c2^{m-1}-4(m-1)+c2^{\frac{m}{2}}-2m+m\\ &≤c2^m-4m&\text{取m ≥ 2} \end{aligned}
T(m)=T(m−1)+T(2m)+m≤c2m−1−4(m−1)+c22m−2m+m≤c2m−4m取m ≥ 2 故渐近上界为
O
(
2
n
)
O(2^n)
O(2n) 。
假设当
n
<
m
n < m
n<m 时,
T
(
n
)
≥
c
n
2
T(n) ≥ cn^2
T(n)≥cn2 ,那么当
n
=
m
n=m
n=m 时,
T
(
m
)
=
T
(
m
−
1
)
+
T
(
m
2
)
+
m
≥
c
(
m
−
1
)
2
+
c
m
2
4
+
m
≤
c
m
2
取c ≤ 1/2
\begin{aligned}T(m)&=T(m-1)+T(\frac{m}{2})+m\\ &≥c(m-1)^2+c{\frac{m^2}{4}}+m\\ &≤cm^2&\text{取c ≤ 1/2} \end{aligned}
T(m)=T(m−1)+T(2m)+m≥c(m−1)2+c4m2+m≤cm2取c ≤ 1/2 故渐近上界为
Ω
(
n
2
)
\Omega(n^2)
Ω(n2) 。
4.4-6
对递归式 T ( n ) = T ( n / 3 ) + T ( 2 n / 3 ) + c n T(n)=T(n/3)+T(2n/3)+cn T(n)=T(n/3)+T(2n/3)+cn ,利用递归树论证其解为 Ω ( n lg n ) \Omega(n\lg n) Ω(nlgn) ,其中 c c c 为常数。
解:图略。由递归树可知道路径长 log 3 n + 1 \log_{3} n+1 log3n+1 。因此算法的成本 c n ( log 3 n + 1 ) ≥ c n log 3 n ≥ c n lg n cn(\log_{3}n+1)≥cn\log_{3}n≥cn\lg n cn(log3n+1)≥cnlog3n≥cnlgn 。因此其解为 Ω ( n lg n ) \Omega(n\lg n) Ω(nlgn) 。
4.4-7
对递归式 T ( n ) = 4 T ( ⌊ n / 2 ⌋ ) + c n T(n)=4T(\lfloor n/2\rfloor)+cn T(n)=4T(⌊n/2⌋)+cn ( c c c 为常数),画出递归树,并给出其解的一个渐近紧确界。
解:图略。递归树的层数为:
lg
n
+
1
\lg n +1
lgn+1 ,
第
i
i
i 层的代价符合通式:
2
i
−
1
c
n
2^{i-1}cn
2i−1cn ,
叶子的树目为
n
2
n^{2}
n2 ,
猜测渐近紧确界为
Θ
(
n
2
)
\Theta(n^2)
Θ(n2) ,下面使用代入法证明:
当
n
=
1
n = 1
n=1,
1
2
≤
T
(
1
)
=
1
≤
1
2
1^2≤T(1) = 1 ≤ 1^2
12≤T(1)=1≤12 。
假设当
n
<
m
n < m
n<m 时,
T
(
n
)
≤
d
n
2
−
c
n
T(n) ≤ dn^2-cn
T(n)≤dn2−cn ,那么当
n
=
m
n=m
n=m 时,
T
(
m
)
=
4
T
(
⌊
m
2
⌋
)
+
c
m
≤
d
m
2
−
c
m
\begin{aligned}T(m)&=4T(\lfloor\frac{m}{2}\rfloor)+cm\\ &≤dm^2-cm\\ \end{aligned}
T(m)=4T(⌊2m⌋)+cm≤dm2−cm 故渐近上界为
O
(
n
2
)
O(n^2)
O(n2) 。
假设当
n
<
m
n < m
n<m 时,
T
(
n
)
≥
d
n
2
−
c
n
T(n) ≥dn^2-cn
T(n)≥dn2−cn ,那么当
n
=
m
n=m
n=m 时,
T
(
m
)
=
4
T
(
⌊
m
2
⌋
)
+
c
m
≥
d
m
2
−
c
m
\begin{aligned}T(m)&=4T(\lfloor\frac{m}{2}\rfloor)+cm\\ &≥dm^2-cm\\ \end{aligned}
T(m)=4T(⌊2m⌋)+cm≥dm2−cm 故渐近下界为
Ω
(
n
2
)
\Omega(n^2)
Ω(n2) 。
故渐近紧确界为
Θ
(
n
2
)
\Theta(n^2)
Θ(n2) 。
4.4-8
对递归式 T ( n ) = T ( n − a ) + T ( a ) + c n T(n)=T(n-a)+T(a)+cn T(n)=T(n−a)+T(a)+cn ,利用递归树给出一个渐近紧确解,其中 a ≥ 1 a≥1 a≥1 和 c > 0 c>0 c>0 是常数。
解:图略。递归树的层数为:
n
/
a
n/a
n/a ,
第
i
i
i 层的代价符合通式:
c
n
cn
cn ,
叶子的树目为
n
/
a
n/a
n/a ,
猜测渐近紧确界为
Θ
(
n
2
)
\Theta(n^2)
Θ(n2) ,下面使用代入法证明:
当
n
=
1
n = 1
n=1,
1
2
≤
T
(
1
)
=
1
≤
1
2
1^2≤T(1) = 1 ≤ 1^2
12≤T(1)=1≤12 。
假设当
n
<
m
n < m
n<m 时,
T
(
n
)
≤
d
n
2
T(n) ≤ dn^2
T(n)≤dn2 ,那么当
n
=
m
n=m
n=m 时,
T
(
m
)
=
T
(
m
−
a
)
+
T
(
a
)
+
c
m
≤
d
(
m
−
a
)
2
+
d
a
2
+
c
m
≤
d
m
2
取a>1/2,n>2a
\begin{aligned}T(m)&=T(m-a)+T(a)+cm\\ &≤d(m-a)^2+da^2+cm\\ &≤dm^2&\text{取a>1/2,n>2a} \end{aligned}
T(m)=T(m−a)+T(a)+cm≤d(m−a)2+da2+cm≤dm2取a>1/2,n>2a 故渐近上界为
O
(
n
2
)
O(n^2)
O(n2) 。
假设当
n
<
m
n < m
n<m 时,
T
(
n
)
≥
d
n
2
T(n) ≥ dn^2
T(n)≥dn2 ,那么当
n
=
m
n=m
n=m 时,
T
(
m
)
=
T
(
m
−
a
)
+
T
(
a
)
+
c
m
≥
d
(
m
−
a
)
2
+
d
a
2
+
c
m
≥
d
m
2
取a<1/2,n>2a
\begin{aligned}T(m)&=T(m-a)+T(a)+cm\\ &≥d(m-a)^2+da^2+cm\\ &≥dm^2&\text{取a<1/2,n>2a} \end{aligned}
T(m)=T(m−a)+T(a)+cm≥d(m−a)2+da2+cm≥dm2取a<1/2,n>2a 故渐近下界为
Ω
(
n
2
)
\Omega(n^2)
Ω(n2) 。
故渐近紧确界为
Θ
(
n
2
)
\Theta(n^2)
Θ(n2) 。
4.4-9
对递归式 T ( n ) = T ( α n ) + T ( ( 1 − α ) n ) + c n T(n)=T(\alpha n)+T((1-\alpha)n)+cn T(n)=T(αn)+T((1−α)n)+cn ,利用递归树给出一个渐近紧确解,其中 0 < α < 1 0<\alpha <1 0<α<1 和 c > 0 c>0 c>0 是常数。
解:图略。由对称性可假设
α
∈
(
0
,
1
/
2
)
\alpha\in(0,1/2)
α∈(0,1/2) ,递归树的层数为:
log
1
/
a
n
\log_{1/a}n
log1/an ,
第
i
i
i 层的代价符合通式:
c
n
cn
cn ,
猜测渐近紧确界为
Θ
(
n
lg
n
)
\Theta(n\lg n)
Θ(nlgn) ,下面使用代入法证明:
假设当
n
<
m
n < m
n<m 时,
T
(
n
)
≤
d
n
lg
n
T(n) ≤ dn\lg n
T(n)≤dnlgn ,那么当
n
=
m
n=m
n=m 时,
T
(
m
)
=
T
(
α
m
)
+
T
(
(
1
−
α
)
m
)
+
c
m
≤
d
α
m
lg
(
α
m
)
+
d
(
1
−
α
)
m
lg
(
(
1
−
α
)
m
)
+
c
m
=
d
m
lg
m
+
d
m
(
α
lg
α
+
(
1
−
α
)
lg
(
1
−
α
)
)
+
c
m
≤
d
m
lg
m
取d>-c/(αlgα+(1-α)lg(1-α))
\begin{aligned}T(m)&=T(\alpha m)+T((1-\alpha)m)+cm\\ &≤d\alpha m\lg(\alpha m)+d(1-\alpha)m\lg((1-\alpha)m)+cm\\ &=dm\lg m+dm(\alpha\lg \alpha+(1-\alpha)\lg(1-\alpha))+cm\\ &≤dm\lg m&\text{取d>-c/(αlgα+(1-α)lg(1-α))} \end{aligned}
T(m)=T(αm)+T((1−α)m)+cm≤dαmlg(αm)+d(1−α)mlg((1−α)m)+cm=dmlgm+dm(αlgα+(1−α)lg(1−α))+cm≤dmlgm取d>-c/(αlgα+(1-α)lg(1-α)) 故渐近上界为
O
(
n
lg
n
)
O(n\lg n)
O(nlgn) 。
假设当
n
<
m
n < m
n<m 时,
T
(
n
)
≥
d
n
lg
n
T(n) ≥ dn\lg n
T(n)≥dnlgn ,那么当
n
=
m
n=m
n=m 时,
T
(
m
)
=
T
(
α
m
)
+
T
(
(
1
−
α
)
m
)
+
c
m
≥
d
α
m
lg
(
α
m
)
+
d
(
1
−
α
)
m
lg
(
(
1
−
α
)
m
)
+
c
m
=
d
m
lg
m
+
d
m
(
α
lg
α
+
(
1
−
α
)
lg
(
1
−
α
)
)
+
c
m
≥
d
m
lg
m
取0<d<-c/(αlgα+(1-α)lg(1-α))
\begin{aligned}T(m)&=T(\alpha m)+T((1-\alpha)m)+cm\\ &≥d\alpha m\lg(\alpha m)+d(1-\alpha)m\lg((1-\alpha)m)+cm\\ &=dm\lg m+dm(\alpha\lg \alpha+(1-\alpha)\lg(1-\alpha))+cm\\ &≥dm\lg m&\text{取0<d<-c/(αlgα+(1-α)lg(1-α))} \end{aligned}
T(m)=T(αm)+T((1−α)m)+cm≥dαmlg(αm)+d(1−α)mlg((1−α)m)+cm=dmlgm+dm(αlgα+(1−α)lg(1−α))+cm≥dmlgm取0<d<-c/(αlgα+(1-α)lg(1-α)) 故渐近下界为
Ω
(
n
lg
n
)
\Omega(n\lg n)
Ω(nlgn) 。
故渐近紧确界为
Θ
(
n
lg
n
)
\Theta(n\lg n)
Θ(nlgn) 。