4.3-1
用数学归纳法证明即可,思路是假设
n
<
=
k
n<=k
n<=k时存在c使得
T
(
k
)
<
=
c
n
2
T(k)<=cn^2
T(k)<=cn2成立,只要证明出
n
=
k
+
1
n=k+1
n=k+1时,存在c使得
T
(
k
+
1
)
<
=
c
(
k
+
1
)
2
T(k+1)<=c(k+1)^2
T(k+1)<=c(k+1)2。那么把
T
(
k
)
和
T
(
k
−
1
)
T(k)和T(k-1)
T(k)和T(k−1)代入递归式得到:
T
(
k
)
=
T
(
k
−
1
)
+
k
<
=
c
∗
(
k
−
1
)
2
+
k
=
c
(
k
2
−
2
k
+
1
)
+
k
\begin{aligned} T(k)&=T(k-1)+k\\ &<=c*(k-1)^2+k\\ &=c(k^2-2k+1)+k \end{aligned}
T(k)=T(k−1)+k<=c∗(k−1)2+k=c(k2−2k+1)+k
把T(k)的方程代入T(k+1)的方程可以得到:
T
(
k
+
1
)
=
T
(
k
)
+
k
+
1
<
=
c
(
k
2
−
2
k
+
1
)
+
k
+
k
+
1
=
c
(
k
2
−
2
k
+
1
+
2
k
+
1
c
)
\begin{aligned} T(k+1)&=T(k)+k+1\\ &<=c(k^2-2k+1)+k+k+1\\ &=c(k^2-2k+1+\frac{2k+1}{c}) \end{aligned}
T(k+1)=T(k)+k+1<=c(k2−2k+1)+k+k+1=c(k2−2k+1+c2k+1)
当
c
=
1
2
+
1
4
k
c=\frac12+\frac1{4k}
c=21+4k1时,k无穷大时
c
=
1
2
c=\frac12
c=21,即
c
>
1
2
c>\frac12
c>21.代入上式可得:
T
(
k
+
1
)
<
=
c
(
k
+
1
)
2
,
c
>
1
2
T(k+1)<=c(k+1)^2,c>\frac12
T(k+1)<=c(k+1)2,c>21
证明完毕。
4.3-2
用书中所介绍的代入法计算可能会更简单一些:假设对于m
(
m
<
n
)
(m<n)
(m<n)成立。令:
m
=
⌈
n
2
⌉
m=\left \lceil \frac{n}{2} \right \rceil
m=⌈2n⌉
即对于m,满足方程的解为
O
(
l
g
n
)
,
即
T
(
m
)
<
=
c
∗
l
g
m
O(lgn),即T(m)<=c*lgm
O(lgn),即T(m)<=c∗lgm,将其代入n的递归式中,解出使方程成立的c的解即可。
T
(
n
)
<
=
c
∗
lg
⌈
n
2
⌉
+
1
<
=
c
∗
lg
(
n
2
+
1
)
+
1
<
=
c
∗
lg
(
n
+
2
)
−
c
∗
lg
(
2
)
+
1
\begin{aligned} T(n)&<=c*\lg{\left \lceil \frac{n}{2} \right \rceil }+1\\ &<=c*\lg(\frac{n}2+1)+1\\ &<=c*\lg(n+2)-c*\lg(2)+1 \end{aligned}
T(n)<=c∗lg⌈2n⌉+1<=c∗lg(2n+1)+1<=c∗lg(n+2)−c∗lg(2)+1
显然不成立,因为lg(n+2)>lg(n),按照书中的方法,令n减去d重新计算,猜测:
T
(
n
)
<
=
c
∗
l
g
(
n
−
2
)
T(n)<=c*lg(n-2)
T(n)<=c∗lg(n−2),证明方法和上文中的一样
T
(
n
)
<
=
c
∗
lg
(
⌈
n
2
⌉
−
2
)
+
1
<
=
c
∗
lg
(
n
2
+
1
−
2
)
+
1
=
c
∗
lg
(
(
n
−
2
)
/
2
)
+
1
=
c
∗
lg
(
n
−
2
)
−
c
+
1
\begin{aligned} T(n)&<=c*\lg(\left \lceil \frac{n}{2} \right \rceil-2)+1\\ &<=c*\lg(\frac{n}2+1-2)+1\\ &=c*\lg((n-2)/2)+1\\ &=c*\lg(n-2)-c+1 \end{aligned}
T(n)<=c∗lg(⌈2n⌉−2)+1<=c∗lg(2n+1−2)+1=c∗lg((n−2)/2)+1=c∗lg(n−2)−c+1
在c大于1时,上式成立,且lg(n-2)<lgn。对于渐进上界O(lgn)来说,原式成立。
4.3-3
根据题意,只需证明
T
(
n
)
>
=
c
∗
n
lg
(
n
)
T(n)>=c*n\lg(n)
T(n)>=c∗nlg(n),和上一题类似依旧用代入法证明,假设在m<n时
T
(
m
)
T(m)
T(m)成立,只需证明在n处,有
T
(
n
)
>
=
c
n
l
g
(
n
)
T(n)>=cnlg(n)
T(n)>=cnlg(n)即可。先将
m
=
⌊
n
2
⌋
m=\left \lfloor \frac{n}{2} \right \rfloor
m=⌊2n⌋
代入原式中,得:
T
(
n
)
>
=
2
c
⌊
n
2
⌋
lg
⌊
n
2
⌋
+
n
>
=
2
c
(
n
2
−
1
)
lg
(
n
2
−
1
)
+
n
=
c
(
n
−
2
)
(
lg
(
n
−
2
)
−
1
)
+
n
\begin{aligned} T(n)&>=2c\left \lfloor \frac{n}{2} \right \rfloor \lg{\left \lfloor \frac{n}{2} \right \rfloor }+n\\ &>=2c(\frac{n}{2}-1)\lg(\frac{n}{2}-1)+n\\ &=c(n-2)(\lg(n-2)-1)+n \end{aligned}
T(n)>=2c⌊2n⌋lg⌊2n⌋+n>=2c(2n−1)lg(2n−1)+n=c(n−2)(lg(n−2)−1)+n
很显然没有得到我们想要的结果,由于是在证明T(n)>=cnlg(n)时,选择在后面加上一个常数项。
即假设
T
(
n
)
>
=
c
(
n
+
2
)
l
g
(
n
+
2
)
T(n)>=c(n+2)lg(n+2)
T(n)>=c(n+2)lg(n+2),证明如下:
T
(
n
)
>
=
2
c
(
⌊
n
2
⌋
+
2
)
(
lg
(
⌊
n
2
⌋
+
2
)
+
n
>
=
c
(
n
+
2
)
lg
(
n
+
2
2
)
+
n
=
c
(
n
+
2
)
lg
(
n
+
2
)
+
(
1
−
c
)
n
−
2
c
>
=
c
(
n
+
2
)
lg
(
n
+
2
)
\begin{aligned} T(n)&>=2c(\left \lfloor \frac{n}{2} \right \rfloor+2)(\lg(\left \lfloor \frac{n}{2} \right \rfloor+2)+n\\ &>=c(n+2)\lg(\frac{n+2}{2})+n\\ &=c(n+2)\lg(n+2)+(1-c)n-2c\\ &>=c(n+2)\lg(n+2) \end{aligned}
T(n)>=2c(⌊2n⌋+2)(lg(⌊2n⌋+2)+n>=c(n+2)lg(2n+2)+n=c(n+2)lg(n+2)+(1−c)n−2c>=c(n+2)lg(n+2)
在
0
<
=
c
<
1
且
n
>
=
2
c
1
−
c
0<=c<1且n>=\frac{2c}{1-c}
0<=c<1且n>=1−c2c的时候上式最后一步成立,且
(
n
+
2
)
l
g
(
n
+
2
)
>
n
l
g
n
(n+2)lg(n+2)>nlgn
(n+2)lg(n+2)>nlgn,所以证明完毕。
4.3-4
要想不调整归纳证明中的边界条件,只能放大渐进上界,比如求其解为
T
(
n
)
=
O
(
n
l
g
n
+
n
)
T(n)=O(nlgn+n)
T(n)=O(nlgn+n)
归纳证明的方法和前面的类似,此时把边界条件
n
=
1
n=1
n=1代入,
T
(
1
)
=
1
l
g
1
+
1
=
1
T(1)=1lg1+1=1
T(1)=1lg1+1=1,所以不需要调整递归边界条件。
4.3-5
4.3-6
这个和前面类似,直接证也是证明不出来的,需要减去一个常数项,即证明:
T
(
n
)
<
=
c
(
n
−
36
)
lg
(
n
−
36
)
T(n)<=c(n-36)\lg(n-36)
T(n)<=c(n−36)lg(n−36)
证明方式和前面一模一样。
4.3-7