笔记
利用主定理可以对形如
T
(
n
)
=
a
T
(
n
/
b
)
+
f
(
n
)
T(n) = aT(n/b) + f(n)
T(n)=aT(n/b)+f(n)的递归式直接求解。下面先给出主定理的描述。
令
a
≥
1
a ≥ 1
a≥1和
b
>
1
b > 1
b>1是常数,
f
(
n
)
f(n)
f(n)是一个函数,
T
(
n
)
T(n)
T(n)是定义在非负整数上的递归式:
T
(
n
)
=
a
T
(
n
/
b
)
+
f
(
n
)
T(n) = aT(n/b) + f(n)
T(n)=aT(n/b)+f(n)
其中我们将
n
/
b
n/b
n/b解释为
⌊
n
/
b
⌋
⌊n/b⌋
⌊n/b⌋或
⌈
n
/
b
⌉
⌈n/b⌉
⌈n/b⌉。那么
T
(
n
)
T(n)
T(n)有如下渐近界:
• 若对某个常数
ε
>
0
ε > 0
ε>0有
f
(
n
)
=
O
(
n
l
o
g
b
a
−
ε
)
f(n)=O(n^{{\rm log}_{b}a-ε})
f(n)=O(nlogba−ε),则
T
(
n
)
=
Θ
(
n
l
o
g
b
a
)
T(n)=Θ(n^{{\rm log}_{b}a})
T(n)=Θ(nlogba)。
• 若
f
(
n
)
=
Θ
(
n
l
o
g
b
a
)
f(n)=Θ(n^{{\rm log}_{b}a})
f(n)=Θ(nlogba),则
T
(
n
)
=
Θ
(
n
l
o
g
b
a
l
g
n
)
T(n)=Θ(n^{{\rm log}_{b}a}{\rm lg}n)
T(n)=Θ(nlogbalgn)。
• 若对某个常数
ε
>
0
ε > 0
ε>0有
f
(
n
)
=
Ω
(
n
l
o
g
b
a
+
ε
)
f(n)=Ω(n^{{\rm log}_{b}a+ε})
f(n)=Ω(nlogba+ε),且对某个常数
c
<
1
c < 1
c<1和所有足够大的
n
n
n有
a
f
(
n
/
b
)
≤
c
f
(
n
)
af(n/b) ≤ cf(n)
af(n/b)≤cf(n),则
T
(
n
)
=
Θ
(
f
(
n
)
)
T(n)=Θ(f(n))
T(n)=Θ(f(n))。
直观上来看,主定理是将函数
f
(
n
)
f(n)
f(n)与
n
l
o
g
b
a
n^{{\rm log}_{b}a}
nlogba进行比较。若
n
l
o
g
b
a
n^{{\rm log}_{b}a}
nlogba渐近更大,则为情况1,解为
T
(
n
)
=
Θ
(
n
l
o
g
b
a
)
T(n)=Θ(n^{{\rm log}_{b}a})
T(n)=Θ(nlogba);若
f
(
n
)
f(n)
f(n)渐近更大,则有可能为情况3,解为
T
(
n
)
=
Θ
(
f
(
n
)
)
T(n)=Θ(f(n))
T(n)=Θ(f(n));若
f
(
n
)
f(n)
f(n)与
n
l
o
g
b
a
n^{{\rm log}_{b}a}
nlogba渐近相等,则为情况2,解为
T
(
n
)
=
Θ
(
n
l
o
g
b
a
l
g
n
)
T(n)=Θ(n^{{\rm log}_{b}a}{\rm lg}n)
T(n)=Θ(nlogbalgn)。
需要注意的是,这里讲的“渐近大于或渐近小于”指的是“多项式意义上的渐近大于或渐近小于”。对于况1,并不是满足
f
(
n
)
f(n)
f(n)渐近小于
n
l
o
g
b
a
n^{{\rm log}_{b}a}
nlogba就够了,而是在“渐近小于”的基础上还要相差一个因子
n
ε
n^ε
nε,即
f
(
n
)
=
O
(
n
l
o
g
b
a
−
ε
)
f(n)=O(n^{{\rm log}_{b}a-ε})
f(n)=O(nlogba−ε),其中
ε
ε
ε是一个大于
0
0
0的常数。而在第3种情况中,也并不是满足
f
(
n
)
f(n)
f(n)渐近大于
n
l
o
g
b
a
n^{{\rm log}_{b}a}
nlogba就够了,而是在“渐近大于”的基础上还要相差一个因子
n
ε
n^ε
nε,即
f
(
n
)
=
Ω
(
n
l
o
g
b
a
+
ε
)
f(n)=Ω(n^{{\rm log}_{b}a+ε})
f(n)=Ω(nlogba+ε)。
另外要注意的是,主定理的3种情况并未覆盖
f
(
n
)
f(n)
f(n)的所有可能性。存在一些函数
f
(
n
)
f(n)
f(n)并不属于3种情况中的任何一种,这时就不能应用主方法来求解递归式。
下面通过例子来说明主方法的应用。
先看递归式
T
(
n
)
=
9
T
(
n
/
3
)
+
n
T(n)=9T(n/3)+n
T(n)=9T(n/3)+n。套用主定理,有
a
=
9
,
b
=
3
a = 9, b = 3
a=9,b=3并且
f
(
n
)
=
n
f(n) = n
f(n)=n,于是有
n
l
o
g
b
a
=
n
l
o
g
3
9
=
n
2
n^{{\rm log}_{b}a}=n^{{\rm log}_{3}9}=n^2
nlogba=nlog39=n2。由于
f
(
n
)
=
O
(
n
l
o
g
b
a
−
ε
)
f(n)=O(n^{{\rm log}_{b}a-ε})
f(n)=O(nlogba−ε),其中
ε
=
1
ε = 1
ε=1,所以可以应用主定理的情况1,从而得到解
T
(
n
)
=
Θ
(
n
l
o
g
b
a
)
=
Θ
(
n
2
)
T(n)=Θ(n^{{\rm log}_{b}a})=Θ(n^2)
T(n)=Θ(nlogba)=Θ(n2)。
再看一个递归式
T
(
n
)
=
T
(
2
n
/
3
)
+
1
T(n)=T(2n/3)+1
T(n)=T(2n/3)+1。套用主定理,有
a
=
1
,
b
=
3
/
2
a = 1, b = 3/2
a=1,b=3/2并且
f
(
n
)
=
1
f(n) = 1
f(n)=1,于是有
n
l
o
g
b
a
=
n
l
o
g
3
/
2
1
=
n
0
=
1
n^{{\rm log}_{b}a}=n^{{\rm log}_{3/2}1}=n^0=1
nlogba=nlog3/21=n0=1。由于
f
(
n
)
=
Θ
(
n
l
o
g
b
a
)
=
Θ
(
1
)
f(n)=Θ(n^{{\rm log}_{b}a})=Θ(1)
f(n)=Θ(nlogba)=Θ(1),所以可以应用主定理的情况2,从而得到解
T
(
n
)
=
Θ
(
n
l
o
g
b
a
l
g
n
)
=
Θ
(
l
g
n
)
T(n)=Θ(n^{{\rm log}_{b}a}{\rm lg}n)=Θ({\rm lg}n)
T(n)=Θ(nlogbalgn)=Θ(lgn)。
再看递归式
T
(
n
)
=
3
T
(
n
/
4
)
+
n
l
g
n
T(n)=3T(n/4)+n{\rm lg}n
T(n)=3T(n/4)+nlgn。套用主定理,有
a
=
3
,
b
=
4
a = 3, b = 4
a=3,b=4并且
f
(
n
)
=
n
l
g
n
f(n) = n{\rm lg}n
f(n)=nlgn,于是有
n
l
o
g
b
a
=
n
l
o
g
4
3
=
O
(
n
0.793
)
n^{{\rm log}_{b}a}=n^{{\rm log}_{4}3}=O(n^{0.793})
nlogba=nlog43=O(n0.793)。所以有
f
(
n
)
=
n
l
g
n
=
Ω
(
n
l
o
g
b
a
+
ε
)
f(n)=n{\rm lg}n=Ω(n^{{\rm log}_{b}a+ε})
f(n)=nlgn=Ω(nlogba+ε),其中
ε
≈
0.2
ε ≈ 0.2
ε≈0.2。并且当
3
/
4
≤
c
<
1
3/4 ≤ c < 1
3/4≤c<1时,有
a
f
(
n
/
b
)
=
3
f
(
n
/
4
)
=
3
•
(
n
/
4
)
•
l
g
(
n
/
4
)
=
(
3
/
4
)
•
n
l
g
(
n
/
4
)
≤
c
f
(
n
)
=
c
n
l
g
n
af(n/b) = 3f(n/4) = 3•(n/4)•{\rm lg}(n/4) = (3/4)•n{\rm lg}(n/4) ≤ cf(n) = cn{\rm lg}n
af(n/b)=3f(n/4)=3•(n/4)•lg(n/4)=(3/4)•nlg(n/4)≤cf(n)=cnlgn。所以可以应用主定理的情况3,从而得到解
T
(
n
)
=
Θ
(
f
(
n
)
)
=
Θ
(
n
l
g
n
)
T(n)=Θ(f(n))=Θ(n{\rm lg}n)
T(n)=Θ(f(n))=Θ(nlgn)。
最后看一个递归式
T
(
n
)
=
2
T
(
n
/
2
)
+
n
l
g
n
T(n)=2T(n/2)+n{\rm lg}n
T(n)=2T(n/2)+nlgn。套用主定理,有
a
=
2
,
b
=
2
a = 2, b = 2
a=2,b=2并且
f
(
n
)
=
n
l
g
n
f(n) = n{\rm lg}n
f(n)=nlgn,于是有
n
l
o
g
b
a
=
n
l
o
g
2
2
=
n
n^{{\rm log}_{b}a}=n^{{\rm log}_{2}2}=n
nlogba=nlog22=n。虽然
f
(
n
)
=
n
l
g
n
f(n) = n{\rm lg}n
f(n)=nlgn渐近大于
n
l
o
g
b
a
=
n
n^{{\rm log}_{b}a}=n
nlogba=n,但并不是“多项式意义上的渐近大于”,即不存在
ε
>
0
ε > 0
ε>0,使得
f
(
n
)
=
Ω
(
n
l
o
g
b
a
+
ε
)
f(n)=Ω(n^{{\rm log}_{b}a+ε})
f(n)=Ω(nlogba+ε)。因此这个递归式不能应用主定理求解。
练习
4.5-1 对下列递归式,使用主方法求出渐近紧确界。
a.
T
(
n
)
=
2
T
(
n
/
4
)
+
1
T(n)=2T(n/4)+1
T(n)=2T(n/4)+1
b.
T
(
n
)
=
2
T
(
n
/
4
)
+
n
T(n)=2T(n/4)+\sqrt{n}
T(n)=2T(n/4)+n
c.
T
(
n
)
=
2
T
(
n
/
4
)
+
n
T(n)=2T(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
解
a.
应用主定理,根据递归式有
a
=
2
,
b
=
4
,
f
(
n
)
=
1
a = 2, b = 4, f(n) = 1
a=2,b=4,f(n)=1,所以有
n
l
o
g
b
a
=
n
l
o
g
4
2
=
n
1
/
2
n^{{\rm log}_{b}a}=n^{{\rm log}_{4}2}=n^{1/2}
nlogba=nlog42=n1/2。于是有
f
(
n
)
=
1
=
O
(
n
1
/
2
−
ε
)
=
O
(
n
l
o
g
b
a
−
ε
)
f(n)=1=O(n^{1/2-ε})=O(n^{{\rm log}_{b}a-ε})
f(n)=1=O(n1/2−ε)=O(nlogba−ε),其中
ε
=
1
/
2
ε = 1/2
ε=1/2。因此,可以应用主定理情况1,于是
T
(
n
)
=
Θ
(
n
l
o
g
b
a
)
=
Θ
(
n
1
/
2
)
T(n)=Θ(n^{{\rm log}_{b}a})=Θ(n^{1/2})
T(n)=Θ(nlogba)=Θ(n1/2)。
b.
应用主定理,根据递归式有
a
=
2
,
b
=
4
,
f
(
n
)
=
n
=
n
1
/
2
a = 2, b = 4, f(n) =\sqrt{n}=n^{1/2}
a=2,b=4,f(n)=n=n1/2,所以有
n
l
o
g
b
a
=
n
l
o
g
4
2
=
n
1
/
2
n^{{\rm log}_{b}a}=n^{{\rm log}_{4}2}=n^{1/2}
nlogba=nlog42=n1/2。于是有
f
(
n
)
=
n
1
/
2
=
Θ
(
n
1
/
2
)
=
Θ
(
n
l
o
g
b
a
)
f(n)=n^{1/2}=Θ(n^{1/2})=Θ(n^{{\rm log}_{b}a})
f(n)=n1/2=Θ(n1/2)=Θ(nlogba)。因此,可以应用主定理情况2,于是
T
(
n
)
=
Θ
(
n
l
o
g
b
a
l
g
n
)
=
Θ
(
n
1
/
2
l
g
n
)
T(n)=Θ(n^{{\rm log}_{b}a}{\rm lg}n)=Θ(n^{1/2}{\rm lg}n)
T(n)=Θ(nlogbalgn)=Θ(n1/2lgn)。
c.
应用主定理,根据递归式有
a
=
2
,
b
=
4
,
f
(
n
)
=
n
a = 2, b = 4, f(n) = n
a=2,b=4,f(n)=n,所以有
n
l
o
g
b
a
=
n
l
o
g
4
2
=
n
1
/
2
n^{{\rm log}_{b}a}=n^{{\rm log}_{4}2}=n^{1/2}
nlogba=nlog42=n1/2。于是有
f
(
n
)
=
n
=
Ω
(
n
1
/
2
+
ε
)
=
Ω
(
n
l
o
g
b
a
+
ε
)
f(n)=n=Ω(n^{1/2+ε})=Ω(n^{{\rm log}_{b}a+ε})
f(n)=n=Ω(n1/2+ε)=Ω(nlogba+ε),其中
ε
=
1
/
2
ε = 1/2
ε=1/2。并且当
1
/
2
≤
c
<
1
1/2 ≤ c < 1
1/2≤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•(n/4) = n/2 ≤ cf(n) = cn
af(n/b)=2f(n/4)=2•(n/4)=n/2≤cf(n)=cn。因此,可以应用主定理情况3,于是
T
(
n
)
=
Θ
(
f
(
n
)
)
=
Θ
(
n
)
T(n) = Θ(f(n)) = Θ(n)
T(n)=Θ(f(n))=Θ(n)。
d.
应用主定理,根据递归式有
a
=
2
,
b
=
4
,
f
(
n
)
=
n
2
a = 2, b = 4, f(n) = n^2
a=2,b=4,f(n)=n2,所以有
n
l
o
g
b
a
=
n
l
o
g
4
2
=
n
1
/
2
n^{{\rm log}_{b}a}=n^{{\rm log}_{4}2}=n^{1/2}
nlogba=nlog42=n1/2。于是有
f
(
n
)
=
n
2
=
Ω
(
n
1
/
2
+
ε
)
=
Ω
(
n
l
o
g
b
a
+
ε
)
f(n)=n^2=Ω(n^{1/2+ε})=Ω(n^{{\rm log}_{b}a+ε})
f(n)=n2=Ω(n1/2+ε)=Ω(nlogba+ε),其中
ε
=
3
/
2
ε = 3/2
ε=3/2。并且当
1
/
8
≤
c
<
1
1/8 ≤ c < 1
1/8≤c<1时,有
a
f
(
n
/
b
)
=
2
f
(
n
/
4
)
=
2
•
(
n
/
4
)
2
=
n
/
8
≤
c
f
(
n
)
=
c
n
af(n/b) = 2f(n/4) = 2•(n/4)^2 = n/8 ≤ cf(n) = cn
af(n/b)=2f(n/4)=2•(n/4)2=n/8≤cf(n)=cn。因此,可以应用主定理情况3,于是
T
(
n
)
=
Θ
(
f
(
n
)
)
=
Θ
(
n
2
)
T(n) = Θ(f(n)) = Θ(n^2)
T(n)=Θ(f(n))=Θ(n2)。
4.5-2 Caesar教授想设计一个渐近快于Strassen算法的矩阵相乘算法。他的算法使用分治法,将每个矩阵分解为n/4 × n/4的子矩阵,分解和合并步骤共花费
Θ
(
n
2
)
Θ(n^2)
Θ(n2)时间。他需要确定,他的算法需要创建多少个子问题,才能击败Strassen算法。如果他的算法创建
a
a
a个子问题,则描述运行时间
T
(
n
)
T(n)
T(n)的递归式为
T
(
n
)
=
a
T
(
n
/
4
)
+
Θ
(
n
2
)
T(n) = aT(n/4) + Θ(n^2)
T(n)=aT(n/4)+Θ(n2)。Caesar教授的算法如果要渐近快于Strassen算法,
a
a
a的最大整数值应是多少?
解
对递归式
T
(
n
)
=
a
T
(
n
/
4
)
+
Θ
(
n
2
)
T(n) = aT(n/4) + Θ(n^2)
T(n)=aT(n/4)+Θ(n2)应用主定理,有
b
=
4
,
f
(
n
)
=
Θ
(
n
2
)
b = 4, f(n) = Θ(n^2)
b=4,f(n)=Θ(n2),所以有
n
l
o
g
b
a
=
n
l
o
g
4
a
n^{{\rm log}_{b}a}=n^{{\rm log}_{4}a}
nlogba=nlog4a。
Strassen算法的时间为
n
l
g
7
n^{{\rm lg}7}
nlg7。要让新算法的时间小于
n
l
g
7
n^{{\rm lg}7}
nlg7,必须满足
n
l
o
g
4
a
<
n
l
g
7
n^{{\rm log}_{4}a}<n^{{\rm lg}7}
nlog4a<nlg7,得到
a
<
49
a < 49
a<49。因此,
a
a
a的最大值为
48
48
48。
4.5-3 使用主方法证明:二分查找递归式
T
(
n
)
=
T
(
n
/
2
)
+
Θ
(
1
)
T(n) = T(n/2) + Θ(1)
T(n)=T(n/2)+Θ(1)的解是
T
(
n
)
=
Θ
(
l
g
n
)
T(n) = Θ({\rm lg}n)
T(n)=Θ(lgn)。(二分查找的描述见练习2.3-5)。
解
应用主定理,根据递归式有
a
=
1
,
b
=
2
,
f
(
n
)
=
Θ
(
1
)
a = 1, b = 2, f(n) = Θ(1)
a=1,b=2,f(n)=Θ(1),所以有
n
l
o
g
b
a
=
n
l
o
g
2
1
=
n
0
=
1
n^{{\rm log}_{b}a}=n^{{\rm log}_{2}1}=n^0=1
nlogba=nlog21=n0=1。于是有
f
(
n
)
=
Θ
(
1
)
=
Θ
(
n
l
o
g
b
a
)
f(n)=Θ(1)=Θ(n^{{\rm log}_{b}a})
f(n)=Θ(1)=Θ(nlogba)。因此,可以应用主定理情况2,于是
T
(
n
)
=
Θ
(
n
l
o
g
b
a
l
g
n
)
=
Θ
(
l
g
n
)
T(n)=Θ(n^{{\rm log}_{b}a}{\rm lg}n)=Θ({\rm lg}n)
T(n)=Θ(nlogbalgn)=Θ(lgn)。
4.5-4 主方法能应用于递归式
T
(
n
)
=
4
T
(
n
/
2
)
+
n
2
l
g
n
T(n) = 4T(n/2) + n^2{\rm lg}n
T(n)=4T(n/2)+n2lgn吗?请说明为什么可以或者为什么不可以。给出这个递归式的一个渐近上界。
解
应用主定理,根据递归式有
a
=
4
,
b
=
2
,
f
(
n
)
=
n
2
l
g
n
a = 4, b = 2, f(n) = n^2{\rm lg}n
a=4,b=2,f(n)=n2lgn,所以有
n
l
o
g
b
a
=
n
l
o
g
2
4
=
n
2
n^{{\rm log}_{b}a}=n^{{\rm log}_{2}4}=n^2
nlogba=nlog24=n2。虽然
f
(
n
)
=
n
2
l
g
n
f(n) = n^2{\rm lg}n
f(n)=n2lgn渐近大于
n
l
o
g
b
a
=
n
2
n^{{\rm log}_{b}a}=n^2
nlogba=n2,但不是多项式意义上的渐近大于,即不存在
ε
>
0
ε > 0
ε>0,使得
f
(
n
)
=
Ω
(
n
l
o
g
b
a
+
ε
)
f(n)=Ω(n^{{\rm log}_{b}a+ε})
f(n)=Ω(nlogba+ε)。因此该递归式不能应用主定理求解。考虑用递归树方法求解。创建递归树,如下图所示。
在递归树中,深度为
i
i
i的结点对应规模为
n
/
2
i
n/2^i
n/2i的子问题。当
n
/
2
i
=
1
n/2^i = 1
n/2i=1时,即
i
=
l
g
n
i = {\rm lg}n
i=lgn时,子问题规模变为
1
1
1,这对应于叶结点
T
(
1
)
T(1)
T(1),因此树的高度
h
=
l
g
n
h = {\rm lg}n
h=lgn。
每层的结点数都是上一层的
4
4
4倍,因此深度为
i
i
i的结点数为
4
i
4^i
4i。深度为
i
i
i的结点对应的子问题规模为
n
/
2
i
n/2^i
n/2i,除叶结点外,深度为
i
i
i的每个结点的代价为
(
n
/
2
i
)
2
•
l
g
(
n
/
2
i
)
(n/2^i)^2•{\rm lg}(n/2^i)
(n/2i)2•lg(n/2i)。因此,除叶结点外,深度为
i
i
i的所有结点的代价为
4
i
•
(
n
/
2
i
)
2
•
l
g
(
n
/
2
i
)
=
n
2
•
l
g
(
n
/
2
i
)
=
n
2
(
l
g
n
−
i
)
4^i•(n/2^i)^2•{\rm lg}(n/2^i)=n^2•{\rm lg}(n/2^i)=n^2({\rm lg}n-i)
4i•(n/2i)2•lg(n/2i)=n2•lg(n/2i)=n2(lgn−i)。叶结点一共有
4
l
g
n
=
n
2
4^{{\rm lg}n}=n^2
4lgn=n2个,所以叶结点那一层的代价为
Θ
(
n
2
)
Θ(n^2)
Θ(n2)。
现在将每一层的代价加起来,得到
下面用代入法验证这一结果。我们要证明的是:存在正常数
c
c
c,使得
T
(
n
)
≤
c
n
2
l
g
2
n
T(n)≤cn^2{\rm lg}^2n
T(n)≤cn2lg2n对足够大的
n
n
n都成立。
取初始情况
T
(
1
)
=
1
T(1) = 1
T(1)=1。无论取
c
c
c为多少,都不能使得
T
(
1
)
≤
c
•
1
2
•
l
g
2
1
=
0
T(1) ≤ c•1^2•{\rm lg}^21 = 0
T(1)≤c•12•lg21=0成立。于是我们要取初始情况为
T
(
2
)
T(2)
T(2)。根据递归式,有
T
(
2
)
=
4
T
(
1
)
+
1
2
•
l
g
1
=
4
T(2) = 4T(1) + 1^2•{\rm lg}1 = 4
T(2)=4T(1)+12•lg1=4。只要取
c
≥
1
c ≥ 1
c≥1,就能使得
T
(
2
)
≤
c
•
2
2
•
l
g
2
2
=
4
c
T(2) ≤ c•2^2•{\rm lg}^22 = 4c
T(2)≤c•22•lg22=4c成立。
现在考虑
n
≥
3
n ≥ 3
n≥3的情况。假设
T
(
n
)
≤
c
n
2
l
g
2
n
T(n)≤cn^2{\rm lg}^2n
T(n)≤cn2lg2n对
2
,
3
,
…
,
n
−
1
2, 3, …, n−1
2,3,…,n−1都成立,于是有
现在要选取合适的
c
c
c,使得不等式
c
n
2
l
g
2
n
−
2
c
n
2
l
g
n
+
c
n
2
+
n
2
l
g
n
≤
c
n
2
l
g
2
n
cn^2{\rm lg}^2 n-2cn^2{\rm lg}n+cn^2+n^2{\rm lg}n≤cn^2{\rm lg}^2n
cn2lg2n−2cn2lgn+cn2+n2lgn≤cn2lg2n成立。对该不等式做一下变换。
当
n
≥
3
n ≥ 3
n≥3时,
1
2
−
1
/
l
g
n
\frac{1}{2-1/{\rm lg}n}
2−1/lgn1是单调递减的,并且在
n
=
3
n = 3
n=3时取得最大值
1
2
−
l
o
g
3
2
\frac{1}{2-{\rm log}_32}
2−log321。因此,只要取
c
≥
1
2
−
l
o
g
3
2
c≥\frac{1}{2-{\rm log}_32}
c≥2−log321,就能使得不等式
c
n
2
l
g
2
n
−
2
c
n
2
l
g
n
+
c
n
2
+
n
2
l
g
n
≤
c
n
2
l
g
2
n
cn^2{\rm lg}^2 n-2cn^2{\rm lg}n+cn^2+n^2{\rm lg}n≤cn^2{\rm lg}^2n
cn2lg2n−2cn2lgn+cn2+n2lgn≤cn2lg2n成立,此时
T
(
n
)
≤
c
n
2
l
g
2
n
T(n)≤cn^2{\rm lg}^2n
T(n)≤cn2lg2n成立。
综合考虑初始情况
T
(
2
)
T(2)
T(2),我们最终要取
c
≥
1
c≥1
c≥1。于是
T
(
n
)
=
O
(
n
2
l
g
2
n
)
T(n)=O(n^2{\rm lg}^2n)
T(n)=O(n2lg2n)得证。
4.5-5 考虑主定理情况3的一部分:对某个常数
c
<
1
c < 1
c<1,正则条件
a
f
(
n
/
b
)
≤
c
f
(
n
)
af(n/b) ≤ cf(n)
af(n/b)≤cf(n)是否成立。给出一个例子,其中常数
a
≥
1
,
b
>
1
a ≥ 1,b > 1
a≥1,b>1且函数
f
(
n
)
f(n)
f(n)满足主定理情况3中除正则条件外的所有条件。
略