本篇文章大部分内容出自《算法设计与分析(第二版)》,仅作个人学习记录。 |
一 函数的渐近的界
(1)若存在正数
c
c
c和
n
0
n_{0}
n0使得对一切
n
≥
n
0
有
0
≤
f
(
n
)
≤
c
g
(
n
)
n \ge n_{0}有0 \le f(n) \le cg(n)
n≥n0有0≤f(n)≤cg(n)成立,则称
f
(
n
)
f(n)
f(n)的渐近的上界是
g
(
n
)
g(n)
g(n),记作
f
(
n
)
=
O
(
g
(
n
)
)
.
f(n)=O(g(n)).
f(n)=O(g(n)).
(2)若存在正数
c
c
c和
n
0
n_{0}
n0使得对一切
n
≥
n
0
有
0
≤
c
g
(
n
)
≤
f
(
n
)
n \ge n_{0}有0 \le cg(n) \le f(n)
n≥n0有0≤cg(n)≤f(n)成立,则称
f
(
n
)
f(n)
f(n)的渐近的下界是
g
(
n
)
g(n)
g(n),记作
f
(
n
)
=
Ω
(
g
(
n
)
)
.
f(n)=\varOmega(g(n)).
f(n)=Ω(g(n)).
(3)若对于任意正数
c
c
c都存在
n
0
n_{0}
n0,使得当
n
≥
n
0
n \ge n_{0}
n≥n0时有
0
≤
f
(
n
)
≤
c
g
(
n
)
0 \le f(n) \le cg(n)
0≤f(n)≤cg(n)成立,则记作
f
(
n
)
=
o
(
g
(
n
)
)
f(n)=o(g(n))
f(n)=o(g(n))
(4)若对于任意正数
c
c
c都存在
n
0
n_{0}
n0,使得当
n
≥
n
0
n \ge n_{0}
n≥n0时有
0
≤
c
g
(
n
)
≤
f
(
n
)
0 \le cg(n) \le f(n)
0≤cg(n)≤f(n)成立,则记作
f
(
n
)
=
w
(
g
(
n
)
)
f(n)=w(g(n))
f(n)=w(g(n))
(5)若
f
(
n
)
=
O
(
g
(
n
)
)
f(n)=O(g(n))
f(n)=O(g(n))且
f
(
n
)
=
Ω
(
g
(
n
)
)
f(n)= \varOmega(g(n))
f(n)=Ω(g(n)),则记作
f
(
n
)
=
Θ
(
g
(
n
)
)
f(n)= \Theta (g(n))
f(n)=Θ(g(n))
二 用递推归纳法求解递推方程
例:
W
(
n
)
=
2
W
(
n
/
2
)
+
n
−
1
,
n
=
2
k
W(n)=2W(n/2)+n-1,n=2^{k}
W(n)=2W(n/2)+n−1,n=2k
W
(
1
)
=
0
W(1)=0
W(1)=0
解:
W
(
n
)
=
2
W
(
2
k
−
1
)
+
2
k
−
1
W(n)=2W(2^{k-1})+2^{k}-1
W(n)=2W(2k−1)+2k−1
=
2
[
2
W
(
2
k
−
2
)
+
2
k
−
1
−
1
]
+
2
k
−
1
=2[2W(2^{k-2})+2^{k-1}-1]+2^{k}-1
=2[2W(2k−2)+2k−1−1]+2k−1
=
2
2
W
(
2
k
−
2
)
+
2
k
−
2
+
2
k
−
1
=2^{2}W(2^{k-2})+2^{k}-2+2^{k}-1
=22W(2k−2)+2k−2+2k−1
=
2
2
[
W
(
2
k
−
3
)
+
2
k
−
2
−
1
]
+
2
k
−
2
+
2
k
−
1
=2^{2}[W(2^{k-3})+2^{k-2}-1]+2^{k}-2+2^{k}-1
=22[W(2k−3)+2k−2−1]+2k−2+2k−1
=
2
3
W
(
2
k
−
3
)
+
2
k
−
2
2
+
2
k
−
2
+
2
k
−
1
=2^{3}W(2^{k-3})+2^{k}-2^{2}+2{k}-2+2{k}-1
=23W(2k−3)+2k−22+2k−2+2k−1
=
.
.
.
=...
=...
=
2
k
W
(
1
)
+
k
2
k
−
(
2
k
−
1
+
2
k
−
2
+
.
.
.
+
2
+
1
)
=2^{k}W(1)+k2^{k}-(2^{k-1}+2^{k-2}+...+2+1)
=2kW(1)+k2k−(2k−1+2k−2+...+2+1)
=
k
2
k
−
2
k
+
1
=k2^{k}-2^{k}+1
=k2k−2k+1
=
n
l
o
g
n
−
n
+
1
=nlogn-n+1
=nlogn−n+1
对结果进行归纳验证。把n=1代入上述公式的
W
(
1
)
=
1
∗
l
o
g
1
−
1
+
1
=
0
W(1)=1*log1-1+1=0
W(1)=1∗log1−1+1=0
符合初始条件,将结果代入原递推方程的右边得
2
W
(
n
/
2
)
+
n
−
1
=
2
[
2
k
−
1
l
o
g
2
k
−
1
−
2
k
−
1
+
1
]
+
2
k
−
1
2W(n/2)+n-1=2[2^{k-1}log2^{k-1}-2^{k-1}+1]+2^{k}-1
2W(n/2)+n−1=2[2k−1log2k−1−2k−1+1]+2k−1
=
2
k
(
k
−
1
)
−
2
k
+
2
+
2
k
−
1
=2^{k}(k-1)-2^{k}+2+2^{k}-1
=2k(k−1)−2k+2+2k−1
=
k
2
k
−
2
k
+
1
=k2^{k}-2^{k}+1
=k2k−2k+1
=
n
l
o
g
n
−
n
+
1
=nlogn-n+1
=nlogn−n+1
=
W
(
n
)
=W(n)
=W(n)
这说明得到得解满足原来的递推方程。
三 主定理
设
a
≥
1
,
b
>
1
a \ge 1, b >1
a≥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),则有以下结果:
(1)若
f
(
n
)
=
O
(
n
l
o
g
b
a
−
ϵ
)
,
ϵ
>
0
f(n)=O(n^{log_{b}^{a-\epsilon}}),\epsilon>0
f(n)=O(nlogba−ϵ),ϵ>0,那么
T
(
n
)
=
Θ
(
n
l
o
g
b
a
)
T(n)= \Theta(n^{log_{b}^{a}})
T(n)=Θ(nlogba)
(2)若
f
(
n
)
=
Θ
(
n
l
o
g
b
a
)
f(n)=\Theta (n^{log_{b}^{a}})
f(n)=Θ(nlogba),那么
T
(
n
)
=
Θ
(
n
l
o
g
b
a
l
o
g
n
)
T(n)=\Theta (n^{log_{b}^{a}}logn)
T(n)=Θ(nlogbalogn)
(1)若
f
(
n
)
=
Ω
(
n
l
o
g
b
a
+
ϵ
)
,
ϵ
>
0
f(n)=\varOmega(n^{log_{b}^{a+\epsilon}}),\epsilon>0
f(n)=Ω(nlogba+ϵ),ϵ>0,且对于某个常数
c
<
1
c<1
c<1和充分大的n有
a
f
(
n
/
b
)
≤
c
f
(
n
)
af(n/b) \le cf(n)
af(n/b)≤cf(n),那么
T
(
n
)
=
Θ
(
f
(
n
)
)
T(n)= \Theta(f(n))
T(n)=Θ(f(n))
例一:求递推方程
T
(
n
)
=
9
T
(
n
/
3
)
+
n
T(n)=9T(n/3)+n
T(n)=9T(n/3)+n
解:上述递推方程中的a=9,b=3,f(n)=n,那么
n
l
o
g
3
9
=
n
2
,
f
(
n
)
=
O
(
n
l
o
g
3
9
−
1
)
n^{log_{3}^{9}}=n^{2},f(n)=O(n^{log_{3}^{9-1}})
nlog39=n2,f(n)=O(nlog39−1)
这里相当于主定理的第一宗情况,其中
ϵ
=
1
\epsilon=1
ϵ=1。根据定理得到
T
(
n
)
=
Θ
(
n
2
)
T(n)= \Theta(n^{2})
T(n)=Θ(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,f(n)=1,那么
n
l
o
g
3
/
2
1
=
n
0
=
1
,
f
(
n
)
=
1
n^{log_{3/2}^{1}}=n^{0}=1,f(n)=1
nlog3/21=n0=1,f(n)=1
这里相当于主定理的第二宗情况。根据定理得到
T
(
n
)
=
Θ
(
n
0
l
o
g
n
)
=
Θ
(
l
o
g
n
)
T(n)= \Theta(n^{0}logn)= \Theta(logn)
T(n)=Θ(n0logn)=Θ(logn).
例三:求递推方程
T
(
n
)
=
3
T
(
n
/
4
)
+
n
l
o
g
n
T(n)=3T(n/4)+nlogn
T(n)=3T(n/4)+nlogn
解:上述递推方程中的a=3,b=4,f(n)=nlogn,那么
n
l
o
g
n
=
Ω
(
n
l
o
g
4
3
+
ϵ
)
=
Ω
(
n
0.793
+
ϵ
)
,
ϵ
≈
0.2
nlogn=\varOmega(n^{log^{3+ \epsilon}_{4}})=\varOmega(n^{0.793+\epsilon}),\epsilon \approx0.2
nlogn=Ω(nlog43+ϵ)=Ω(n0.793+ϵ),ϵ≈0.2。
此外,要使
a
f
(
n
/
b
)
≤
c
f
(
n
)
af(n/b)\le cf(n)
af(n/b)≤cf(n)成立,代入
f
(
n
)
=
n
l
o
g
n
f(n)=nlogn
f(n)=nlogn,得到
3
n
4
l
o
g
n
4
≤
c
n
l
o
g
n
\frac{3n}{4}log\frac{n}{4}\le cnlogn
43nlog4n≤cnlogn
显然只要
c
≥
3
/
4
c\ge 3/4
c≥3/4,上述不等式就可以对充分大的
n
n
n成立。这里相当于主定理的第三种情况。因此有
T
(
n
)
=
Θ
(
f
(
n
)
)
=
Θ
(
n
l
o
g
n
)
T(n)= \Theta(f(n))= \Theta(nlogn)
T(n)=Θ(f(n))=Θ(nlogn).