Part I. Foundations
Chapter 3. Growth of Functions
3.1 渐近记号(Asymptotic notation)
Θ \Theta Θ 记号
对于一个给定的函数
g
(
n
)
g(n)
g(n),我们用
Θ
(
g
(
n
)
)
\Theta(g(n))
Θ(g(n)) 表示函数集合:
Θ
(
g
(
n
)
)
=
{
f
(
n
)
\Theta(g(n))=\{f(n)
Θ(g(n))={f(n):存在正常数
c
1
c_1
c1、
c
2
c_2
c2 和
n
0
n_0
n0,使对所有
n
≥
n
0
n \geq n_0
n≥n0,有
0
≤
c
1
g
(
n
)
≤
f
(
n
)
≤
c
2
g
(
n
)
}
0 \leq c_1g(n) \leq f(n) \leq c_2g(n) \}
0≤c1g(n)≤f(n)≤c2g(n)}.
因为
Θ
(
g
(
n
)
)
\Theta(g(n))
Θ(g(n)) 是一个集合,可以写成
f
(
n
)
∈
Θ
(
g
(
n
)
)
f(n) \in \Theta(g(n))
f(n)∈Θ(g(n)),表示
f
(
n
)
f(n)
f(n) 是
Θ
(
g
(
n
)
)
\Theta(g(n))
Θ(g(n)) 的元素。不过,通常写成
f
(
n
)
=
Θ
(
g
(
n
)
)
f(n) = \Theta(g(n))
f(n)=Θ(g(n)) 表示相同的意思。
对于所有的
n
>
n
0
n>n_0
n>n0,函数
f
(
n
)
f(n)
f(n) 在一个常量因子范围内与
g
(
n
)
g(n)
g(n) 相等。我们说
g
(
n
)
g(n)
g(n) 是
f
(
n
)
f(n)
f(n) 的一个渐近紧确界(asymptotically tight bound)。
Θ
(
g
(
n
)
)
\Theta(g(n))
Θ(g(n)) 的定义要求每个成员
f
(
n
)
∈
Θ
(
g
(
n
)
)
f(n)\in \Theta(g(n))
f(n)∈Θ(g(n)) 是渐近非负(asymptotically nonnegative),也就是说,当
n
n
n 足够大时,
f
(
n
)
f(n)
f(n) 的值非负。因此,函数
g
(
n
)
g(n)
g(n) 必须是渐近非负的,否则集合
Θ
(
g
(
n
)
)
\Theta(g(n))
Θ(g(n)) 为空。
渐近正(asymptotically positive)函数:当
n
n
n 足够大时,其值总为正值。
我们假定在
Θ
\Theta
Θ 记号内使用的每个函数都是渐近非负的。该假设也适用于本章中定义的其他渐近记号。
O O O 记号
对于一个给定的函数
g
(
n
)
g(n)
g(n),我们用
O
(
g
(
n
)
)
O(g(n))
O(g(n)) 表示函数集合:
O
(
g
(
n
)
)
=
{
f
(
n
)
O(g(n))=\{f(n)
O(g(n))={f(n):存在正常数
c
c
c 和
n
0
n_0
n0,使对所有
n
≥
n
0
n \geq n_0
n≥n0,有
0
≤
f
(
n
)
≤
c
g
(
n
)
}
0 \leq f(n) \leq cg(n) \}
0≤f(n)≤cg(n)}。
Θ
\Theta
Θ 记号渐近地给出一个函数的上界和下界。当只有渐近上限(asymptotic upper bound)时,使用
O
O
O 记号。
O
(
g
(
n
)
)
O(g(n))
O(g(n)) 发音:“big-oh of g of n”(
g
(
n
)
g(n)
g(n) 的大
O
O
O),或者有时读作 “oh of g of n”。
f
(
n
)
=
O
(
g
(
n
)
)
f(n) = O(g(n))
f(n)=O(g(n)) 表示函数
f
(
n
)
f(n)
f(n) 是集合
O
(
g
(
n
)
)
O(g(n))
O(g(n)) 的一个元素。
按集合论中的写法,有
Θ
(
g
(
n
)
)
⊆
O
(
g
(
n
)
)
\Theta(g(n)) \sube O(g(n))
Θ(g(n))⊆O(g(n))。
Θ
\Theta
Θ 记号强于
O
O
O 记号。
Ω \Omega Ω 记号
对于一个给定的函数
g
(
n
)
g(n)
g(n),我们用
Ω
(
g
(
n
)
)
\Omega(g(n))
Ω(g(n)) 表示函数集合:
Ω
(
g
(
n
)
)
=
{
f
(
n
)
\Omega(g(n))=\{f(n)
Ω(g(n))={f(n):存在正常数
c
c
c 和
n
0
n_0
n0,使对所有
n
≥
n
0
n \geq n_0
n≥n0,有
0
≤
c
g
(
n
)
≤
f
(
n
)
}
0 \leq cg(n) \leq f(n) \}
0≤cg(n)≤f(n)}。
Ω
\Omega
Ω 记号给出函数的渐近下界(asymptotic lower bound)。
Ω
(
g
(
n
)
)
\Omega(g(n))
Ω(g(n)) 的发音:“big-omega of g of n”,或者有时读作 “omega of g of n”。
定理 3.1
对任意两个函数 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)), f ( n ) = Ω ( g ( n ) ) f(n)=\Omega(g(n)) f(n)=Ω(g(n)) 时,有 f ( n ) = Θ ( g ( n ) ) f(n)=\Theta(g(n)) f(n)=Θ(g(n))。
等式和不等式中渐近记号
等式:
2
n
2
+
3
n
+
1
=
2
n
2
+
Θ
(
n
)
=
Θ
(
n
2
)
2n^2+3n+1 = 2n^2 + \Theta(n) = \Theta(n^2)
2n2+3n+1=2n2+Θ(n)=Θ(n2)
解释:第一个等式说明存在函数
f
(
n
)
∈
Θ
(
n
)
f(n) \in \Theta(n)
f(n)∈Θ(n),使对所有的
n
n
n 有
2
n
2
+
3
n
+
1
=
2
n
2
+
f
(
n
)
2n^2+3n+1 = 2n^2+f(n)
2n2+3n+1=2n2+f(n)。第二个等式说明对任意函数
g
(
n
)
∈
Θ
(
n
)
g(n) \in \Theta(n)
g(n)∈Θ(n),存在函数
h
(
n
)
∈
Θ
(
n
2
)
h(n) \in \Theta(n^2)
h(n)∈Θ(n2),使对所有的
n
n
n 有
2
n
2
+
g
(
n
)
=
h
(
n
)
2n^2+g(n)=h(n)
2n2+g(n)=h(n)。
规则:无论等号左侧的匿名函数如何选择,总有方法选择等号右侧的匿名函数以使方程有效。
o o o 记号
我们使用
o
o
o 记号表示非渐近紧确的上界。定义
o
(
g
(
n
)
)
o(g(n))
o(g(n))(“little-oh of g of n”)为集合:
o
(
g
(
n
)
)
=
{
f
(
n
)
o(g(n))=\{f(n)
o(g(n))={f(n):对任意正常数
c
c
c,存在常数
n
0
>
0
n_0>0
n0>0,使对所有
n
≥
n
0
n \geq n_0
n≥n0,有
0
≤
f
(
n
)
≤
c
g
(
n
)
}
0 \leq f(n) \leq cg(n) \}
0≤f(n)≤cg(n)}。
例如,
2
n
=
o
(
n
2
)
2n=o(n^2)
2n=o(n2),但是
2
n
2
≠
o
(
n
2
)
2n^2 \ne o(n^2)
2n2=o(n2)。
直观上,在
o
o
o 表示中,当
n
n
n 趋于无穷时,函数
f
(
n
)
f(n)
f(n) 相对于
g
(
n
)
g(n)
g(n) 变得无关紧要,即
lim
n
→
∞
f
(
n
)
g
(
n
)
=
0
\lim_{n \to \infty} \frac {f(n)} {g(n)} = 0
limn→∞g(n)f(n)=0。 (3.1)
某些作者将这个极限作为
o
o
o 记号的定义。
ω \omega ω 记号
我们使用
ω
\omega
ω 记号表示非渐近紧确的下界。定义
ω
(
g
(
n
)
)
\omega (g(n))
ω(g(n))(“little-omega of g of n”)为集合:
ω
(
g
(
n
)
)
=
{
f
(
n
)
\omega(g(n))=\{f(n)
ω(g(n))={f(n):对任意正常数
c
c
c,存在常数
n
0
>
0
n_0>0
n0>0,使对所有
n
≥
n
0
n \geq n_0
n≥n0,有
0
≤
c
g
(
n
)
≤
f
(
n
)
}
0 \leq cg(n) \leq f(n) \}
0≤cg(n)≤f(n)}。
例如,
n
2
/
2
=
ω
(
n
)
n^2/2=\omega (n)
n2/2=ω(n),但是
n
2
/
2
≠
ω
(
n
2
)
n^2/2 \ne \omega(n^2)
n2/2=ω(n2)。
ω
\omega
ω 记号的另一种定义:
f
(
n
)
∈
ω
(
g
(
n
)
)
f(n) \in \omega(g(n))
f(n)∈ω(g(n)),当且仅当
g
(
n
)
∈
o
(
f
(
n
)
)
g(n) \in o(f(n))
g(n)∈o(f(n))。
关系
f
(
n
)
=
ω
(
g
(
n
)
)
f(n)=\omega(g(n))
f(n)=ω(g(n)) 意味着
lim
n
→
∞
f
(
n
)
g
(
n
)
=
∞
\lim_{n \to \infty} \frac {f(n)} {g(n)} = \infty
limn→∞g(n)f(n)=∞。
函数的比较
下面假设
f
(
n
)
f(n)
f(n) 和
g
(
n
)
g(n)
g(n) 是渐近正值函数。
传递性(Transitivity):
f
(
n
)
=
Θ
(
g
(
n
)
)
f(n)=\Theta(g(n))
f(n)=Θ(g(n)) 和
g
(
n
)
=
Θ
(
h
(
n
)
)
g(n)=\Theta(h(n))
g(n)=Θ(h(n)) 蕴含
f
(
n
)
=
Θ
(
h
(
n
)
)
f(n)=\Theta(h(n))
f(n)=Θ(h(n)),
f
(
n
)
=
O
(
g
(
n
)
)
f(n)=O(g(n))
f(n)=O(g(n)) 和
g
(
n
)
=
O
(
h
(
n
)
)
g(n)=O(h(n))
g(n)=O(h(n)) 蕴含
f
(
n
)
=
O
(
h
(
n
)
)
f(n)=O(h(n))
f(n)=O(h(n)),
f
(
n
)
=
Ω
(
g
(
n
)
)
f(n)=\Omega(g(n))
f(n)=Ω(g(n)) 和
g
(
n
)
=
Ω
(
h
(
n
)
)
g(n)=\Omega(h(n))
g(n)=Ω(h(n)) 蕴含
f
(
n
)
=
Ω
(
h
(
n
)
)
f(n)=\Omega(h(n))
f(n)=Ω(h(n)),
f
(
n
)
=
o
(
g
(
n
)
)
f(n)=o(g(n))
f(n)=o(g(n)) 和
g
(
n
)
=
o
(
h
(
n
)
)
g(n)=o(h(n))
g(n)=o(h(n)) 蕴含
f
(
n
)
=
o
(
h
(
n
)
)
f(n)=o(h(n))
f(n)=o(h(n)),
f
(
n
)
=
ω
(
g
(
n
)
)
f(n)=\omega(g(n))
f(n)=ω(g(n)) 和
g
(
n
)
=
ω
(
h
(
n
)
)
g(n)=\omega(h(n))
g(n)=ω(h(n)) 蕴含
f
(
n
)
=
ω
(
h
(
n
)
)
f(n)=\omega(h(n))
f(n)=ω(h(n))。
自反性(Reflexivity):
f
(
n
)
=
Θ
(
f
(
n
)
)
f(n)=\Theta(f(n))
f(n)=Θ(f(n)),
f
(
n
)
=
O
(
f
(
n
)
)
f(n)=O(f(n))
f(n)=O(f(n)),
f
(
n
)
=
Ω
(
f
(
n
)
)
f(n)=\Omega(f(n))
f(n)=Ω(f(n))。
对称性(Symmetry):
f
(
n
)
=
Θ
(
g
(
n
)
)
f(n)=\Theta(g(n))
f(n)=Θ(g(n)) 当且仅当
g
(
n
)
=
Θ
(
f
(
n
)
)
g(n)=\Theta(f(n))
g(n)=Θ(f(n))。
转置对称性(Transpose symmetry):
f
(
n
)
=
O
(
g
(
n
)
)
f(n)=O(g(n))
f(n)=O(g(n)) 当且仅当
g
(
n
)
=
Ω
(
f
(
n
)
)
g(n)=\Omega(f(n))
g(n)=Ω(f(n)),
f
(
n
)
=
o
(
g
(
n
)
)
f(n)=o(g(n))
f(n)=o(g(n)) 当且仅当
g
(
n
)
=
ω
(
f
(
n
)
)
g(n)=\omega(f(n))
g(n)=ω(f(n))。
如果
f
(
n
)
=
o
(
g
(
n
)
)
f(n)=o(g(n))
f(n)=o(g(n)),那么
f
(
n
)
f(n)
f(n) 比
g
(
n
)
g(n)
g(n) 渐近较小(asymptotically smaller);
如果
f
(
n
)
=
ω
(
g
(
n
)
)
f(n)=\omega(g(n))
f(n)=ω(g(n)),那么
f
(
n
)
f(n)
f(n) 比
g
(
n
)
g(n)
g(n) 渐近较大(asymptotically larger)。
三分性(Trichotomy): 对任意两个实数
a
a
a 和
b
b
b,下列三种情况恰有一种成立:
a
<
b
a<b
a<b,
a
=
b
a=b
a=b 或
a
>
b
a>b
a>b。
渐近记号不满足实数的三分性。
练习
3.1-1 设
f
(
n
)
f(n)
f(n) 和
g
(
n
)
g(n)
g(n) 是渐近非负函数,利用
Θ
\Theta
Θ 记号的基本定义来证明
max
(
f
(
n
)
,
g
(
n
)
)
=
Θ
(
f
(
n
)
+
g
(
n
)
)
\max(f(n),g(n)) = \Theta(f(n)+g(n))
max(f(n),g(n))=Θ(f(n)+g(n))。
证: 根据
Θ
\Theta
Θ 记号的定义知,需要证明:存在正常数
c
1
c_1
c1、
c
2
c_2
c2 和
n
0
n_0
n0,使对所有
n
≥
n
0
n \geq n_0
n≥n0,
有
0
≤
c
1
(
f
(
n
)
+
g
(
n
)
)
≤
max
(
f
(
n
)
,
g
(
n
)
)
≤
c
2
(
f
(
n
)
+
g
(
n
)
)
0 \leq c_1(f(n)+g(n)) \leq \max(f(n),g(n)) \leq c_2(f(n)+g(n))
0≤c1(f(n)+g(n))≤max(f(n),g(n))≤c2(f(n)+g(n))。
因为
f
(
n
)
f(n)
f(n) 和
g
(
n
)
g(n)
g(n) 渐近非负,所以存在正常数
m
0
m_0
m0,使对所有
n
≥
m
0
n \ge m_0
n≥m0,有
f
(
n
)
≥
0
f(n)\ge0
f(n)≥0,
g
(
n
)
≥
0
g(n)\ge0
g(n)≥0。
令
h
(
n
)
=
max
(
f
(
n
)
,
g
(
n
)
)
h(n) = \max(f(n),g(n))
h(n)=max(f(n),g(n)),
则有
f
(
n
)
≤
h
(
n
)
f(n)\le h(n)
f(n)≤h(n),
g
(
n
)
≤
h
(
n
)
g(n) \le h(n)
g(n)≤h(n),
h
(
n
)
<
f
(
n
)
+
g
(
n
)
h(n)<f(n)+g(n)
h(n)<f(n)+g(n)。
所以
f
(
n
)
+
g
(
n
)
≤
2
h
(
n
)
f(n)+g(n) \le 2h(n)
f(n)+g(n)≤2h(n),得出
(
f
(
n
)
+
g
(
n
)
)
/
2
≤
h
(
n
)
(f(n)+g(n))/2 \le h(n)
(f(n)+g(n))/2≤h(n)。
综上,存在正常数
c
1
=
1
/
2
c_1=1/2
c1=1/2,
c
2
=
1
c_2=1
c2=1 和
n
0
=
m
0
n_0=m_0
n0=m0,满足条件,得证。
3.1-2 证明:对任意实数常量
a
a
a 和
b
b
b,其中
b
>
0
b>0
b>0,有
(
n
+
a
)
b
=
Θ
(
n
b
)
(n+a)^b = \Theta(n^b)
(n+a)b=Θ(nb)。 (3.2)
证: 根据
Θ
\Theta
Θ 记号的定义知,需要证明:存在正常数
c
1
c_1
c1、
c
2
c_2
c2 和
n
0
n_0
n0,使对所有
n
≥
n
0
n \geq n_0
n≥n0,
有
0
≤
c
1
n
b
≤
(
n
+
a
)
b
≤
c
2
n
b
0 \leq c_1 n^b \leq (n+a)^b \leq c_2 n^b
0≤c1nb≤(n+a)b≤c2nb。
当
n
>
0
n>0
n>0 时,
n
b
>
0
n^b>0
nb>0,则有
0
≤
c
1
≤
(
1
+
a
/
n
)
b
≤
c
2
0 \leq c_1 \leq (1+a/n)^b \leq c_2
0≤c1≤(1+a/n)b≤c2。
当
a
≥
0
a \ge 0
a≥0 时,
令
n
>
0
n>0
n>0,则有
1
+
a
/
n
>
1
1+a/n>1
1+a/n>1,又
b
>
0
b>0
b>0,所以
(
1
+
a
/
n
)
b
>
1
(1+a/n)^b > 1
(1+a/n)b>1。
令
n
≥
∣
a
∣
n\ge|a|
n≥∣a∣,则有
1
+
a
/
n
≤
2
1+a/n \le 2
1+a/n≤2,所以
(
1
+
a
/
n
)
b
≤
2
b
(1+a/n)^b \le 2^b
(1+a/n)b≤2b。
当
a
<
0
a < 0
a<0 时,
令
n
≥
2
∣
a
∣
n\ge 2|a|
n≥2∣a∣,则有
1
−
∣
a
∣
/
n
≥
1
/
2
1-|a|/n\ge 1/2
1−∣a∣/n≥1/2,又
b
>
0
b>0
b>0,所以
(
1
+
a
/
n
)
b
≥
(
1
/
2
)
b
(1+a/n)^b \ge (1/2)^b
(1+a/n)b≥(1/2)b。
令
n
≥
∣
a
∣
n\ge|a|
n≥∣a∣,则有
1
−
∣
a
∣
/
n
≤
1
1-|a|/n \le 1
1−∣a∣/n≤1,所以
(
1
+
a
/
n
)
b
≤
1
(1+a/n)^b \le 1
(1+a/n)b≤1。
因为
b
>
0
b>0
b>0,所以
0
<
(
1
/
2
)
b
<
1
<
2
b
0 < (1/2)^b < 1 < 2^b
0<(1/2)b<1<2b。
综上,存在正常数 c 1 = ( 1 / 2 ) b c_1=(1/2)^b c1=(1/2)b, c 2 = 2 b c_2=2^b c2=2b, n 0 = 2 ∣ a ∣ n_0=2|a| n0=2∣a∣,满足条件,得证。
3.1-3 解释:为什么“算法
A
A
A 的运行时间至少是
O
(
n
2
)
O(n^2)
O(n2)”这句话是无意义的。
解: 设运行时间为
T
(
n
)
T(n)
T(n)。
T
(
n
)
≥
O
(
n
2
)
T(n)\ge O(n^2)
T(n)≥O(n2) 表示:对于集合
O
(
n
2
)
O(n^2)
O(n2) 中的某些函数
f
(
n
)
f(n)
f(n),
T
(
n
)
≥
f
(
n
)
T(n) \ge f(n)
T(n)≥f(n)。该语句适用于任何运行时间
T
(
n
)
T(n)
T(n),因为对于所有
n
n
n,在
O
(
n
2
)
O(n^2)
O(n2) 中均存在函数
g
(
n
)
=
0
g(n) = 0
g(n)=0,而运行时间始终为非负数。 因此,该声明没有告诉我们有关运行时间的任何信息。
3.1-4
2
n
+
1
=
O
(
2
n
)
2^{n+1}=O(2^n)
2n+1=O(2n) 成立吗?
2
2
n
=
O
(
2
n
)
2^{2n}=O(2^n)
22n=O(2n) 成立吗?
解:
2
n
+
1
=
O
(
2
n
)
2^{n+1}=O(2^n)
2n+1=O(2n) 成立,
2
2
n
=
O
(
2
n
)
2^{2n}=O(2^n)
22n=O(2n) 不成立。
① 要证明
2
n
+
1
=
O
(
2
n
)
2^{n+1}=O(2^n)
2n+1=O(2n) 成立,需证存在正常数
c
c
c 和
n
0
n_0
n0,使对所有
n
≥
n
0
n \geq n_0
n≥n0,有
0
≤
2
n
+
1
≤
c
⋅
2
n
0 \leq 2^{n+1} \leq c\cdot 2^n
0≤2n+1≤c⋅2n。
当
n
>
0
n>0
n>0 时,
2
n
>
1
2^n>1
2n>1,由上式得,
0
≤
2
≤
c
0 \le 2 \le c
0≤2≤c。
综上,存在正常数
c
=
2
c=2
c=2,
n
0
=
1
n_0=1
n0=1,使条件成立,得证。
② 要证明
2
2
n
=
O
(
2
n
)
2^{2n}=O(2^n)
22n=O(2n) 不成立,可以使用反证法。假设
2
2
n
=
O
(
2
n
)
2^{2n}=O(2^n)
22n=O(2n) 成立,那么存在正常数
c
c
c 和
n
0
n_0
n0,使对所有
n
≥
n
0
n \geq n_0
n≥n0,有
0
≤
2
2
n
≤
c
⋅
2
n
0 \leq 2^{2n} \leq c\cdot 2^{n}
0≤22n≤c⋅2n,即
0
≤
2
n
≤
c
0 \le 2^n \le c
0≤2n≤c。
当
n
>
0
n>0
n>0 时,
2
n
2^n
2n 的值域为
(
1
,
∞
)
(1,\infty)
(1,∞)。
所以,不存在常数
c
c
c,使
c
≥
2
n
c \ge 2^n
c≥2n 恒成立。与假设矛盾,得证。
3.1-5 证明定理 3.1。
证: 要证明定理 3.1,需证:对任意两个函数
f
(
n
)
f(n)
f(n) 和
g
(
n
)
g(n)
g(n),
①
f
(
n
)
=
O
(
g
(
n
)
)
,
f
(
n
)
=
Ω
(
g
(
n
)
)
⟹
f
(
n
)
=
Θ
(
g
(
n
)
)
f(n) = O(g(n)),f(n)=\Omega(g(n)) \Longrightarrow f(n)=\Theta(g(n))
f(n)=O(g(n)),f(n)=Ω(g(n))⟹f(n)=Θ(g(n)),
②
f
(
n
)
=
Θ
(
g
(
n
)
)
⟹
f
(
n
)
=
O
(
g
(
n
)
)
,
f
(
n
)
=
Ω
(
g
(
n
)
)
f(n)=\Theta(g(n)) \Longrightarrow f(n) = O(g(n)),f(n)=\Omega(g(n))
f(n)=Θ(g(n))⟹f(n)=O(g(n)),f(n)=Ω(g(n))。
先证明 ① 成立,要证明
f
(
n
)
=
Θ
(
g
(
n
)
)
f(n)=\Theta(g(n))
f(n)=Θ(g(n)),需证:存在正常数
c
1
c_1
c1、
c
2
c_2
c2 和
n
0
n_0
n0,使对所有
n
≥
n
0
n \geq n_0
n≥n0,有
0
≤
c
1
g
(
n
)
≤
f
(
n
)
≤
c
2
g
(
n
)
0 \leq c_1g(n) \leq f(n) \leq c_2g(n)
0≤c1g(n)≤f(n)≤c2g(n)。
由
f
(
n
)
=
O
(
g
(
n
)
)
f(n) = O(g(n))
f(n)=O(g(n)),得:存在正常数
a
a
a 和
m
1
m_1
m1,使对所有
n
≥
m
1
n \geq m_1
n≥m1,有
0
≤
f
(
n
)
≤
a
g
(
n
)
0 \leq f(n) \leq ag(n)
0≤f(n)≤ag(n)。
由
f
(
n
)
=
Ω
(
g
(
n
)
)
f(n)=\Omega(g(n))
f(n)=Ω(g(n)),得:存在正常数
b
b
b 和
m
2
m_2
m2,使对所有
n
≥
m
2
n \geq m_2
n≥m2,有
0
≤
b
g
(
n
)
≤
f
(
n
)
0 \leq bg(n) \leq f(n)
0≤bg(n)≤f(n)。
所以,存在正常数
c
1
=
b
c_1=b
c1=b,
c
2
=
a
c_2=a
c2=a,
n
0
=
max
(
m
1
,
m
2
)
n_0=\max(m_1,m_2)
n0=max(m1,m2),满足条件,得证。
再证明 ② 成立。由
f
(
n
)
=
Θ
(
g
(
n
)
)
f(n)=\Theta(g(n))
f(n)=Θ(g(n)),得:存在正常数
c
1
c_1
c1、
c
2
c_2
c2 和
n
0
n_0
n0,使对所有
n
≥
n
0
n \geq n_0
n≥n0,有
0
≤
c
1
g
(
n
)
≤
f
(
n
)
≤
c
2
g
(
n
)
0 \leq c_1g(n) \leq f(n) \leq c_2g(n)
0≤c1g(n)≤f(n)≤c2g(n)。
故,存在正常数
c
2
c_2
c2 和
n
0
n_0
n0,使对所有
n
≥
n
0
n \geq n_0
n≥n0,有
0
≤
f
(
n
)
≤
c
2
g
(
n
)
0 \leq f(n) \leq c_2g(n)
0≤f(n)≤c2g(n),所以
f
(
n
)
=
O
(
g
(
n
)
)
f(n) = O(g(n))
f(n)=O(g(n)) 成立;存在正常数
c
1
c_1
c1 和
n
0
n_0
n0,使对所有
n
≥
n
0
n \geq n_0
n≥n0,有
0
≤
c
1
g
(
n
)
≤
f
(
n
)
0 \leq c_1g(n) \leq f(n)
0≤c1g(n)≤f(n),所以
f
(
n
)
=
Ω
(
g
(
n
)
)
f(n)=\Omega(g(n))
f(n)=Ω(g(n)) 成立。得证。
综上,定理 3.1 成立。
3.1-6 证明:一个算法的运行时间是
Θ
(
g
(
n
)
)
\Theta(g(n))
Θ(g(n)),当且仅当最坏情况运行时间是
O
(
g
(
n
)
)
O(g(n))
O(g(n)),最佳情况运行时间是
Ω
(
g
(
n
)
)
\Omega(g(n))
Ω(g(n))。
证: 设算法的运行时间是
T
(
n
)
T(n)
T(n),由定理 3.1 得,
T
(
n
)
=
O
(
g
(
n
)
)
,
T
(
n
)
=
Ω
(
g
(
n
)
)
⟺
T
(
n
)
=
Θ
(
g
(
n
)
)
T(n) = O(g(n)),T(n)=\Omega(g(n)) \Longleftrightarrow T(n)=\Theta(g(n))
T(n)=O(g(n)),T(n)=Ω(g(n))⟺T(n)=Θ(g(n))。
3.1-7 证明
o
(
g
(
n
)
)
∩
ω
(
g
(
n
)
)
o(g(n)) \cap \omega(g(n))
o(g(n))∩ω(g(n)) 是空集。
证: 反证法。假设存在函数
h
(
n
)
∈
o
(
g
(
n
)
)
∩
ω
(
g
(
n
)
)
h(n) \in o(g(n)) \cap \omega(g(n))
h(n)∈o(g(n))∩ω(g(n)),即
h
(
n
)
=
o
(
g
(
n
)
)
h(n)=o(g(n))
h(n)=o(g(n)),
h
(
n
)
=
ω
(
g
(
n
)
)
h(n) = \omega(g(n))
h(n)=ω(g(n))。
由
h
(
n
)
=
o
(
g
(
n
)
)
h(n)=o(g(n))
h(n)=o(g(n)),得:对任意正常数
c
c
c,存在常数
n
1
>
0
n_1>0
n1>0,使对所有
n
≥
n
1
n \geq n_1
n≥n1,有
0
≤
h
(
n
)
≤
c
g
(
n
)
0 \leq h(n) \leq cg(n)
0≤h(n)≤cg(n)。
由
h
(
n
)
=
ω
(
g
(
n
)
)
h(n)=\omega(g(n))
h(n)=ω(g(n)),得:对任意正常数
c
c
c,存在常数
n
2
>
0
n_2>0
n2>0,使对所有
n
≥
n
2
n \geq n_2
n≥n2,有
0
≤
c
g
(
n
)
≤
h
(
n
)
0 \leq cg(n) \leq h(n)
0≤cg(n)≤h(n)。
故,对任意正常数
c
c
c,存在常数
n
0
=
max
(
n
1
,
n
2
)
n_0=\max(n1,n2)
n0=max(n1,n2),使对所有
n
≥
n
0
n \geq n_0
n≥n0,有
h
(
n
)
=
c
g
(
n
)
h(n)=cg(n)
h(n)=cg(n)。
所以,
h
(
n
)
=
0
h(n)=0
h(n)=0,
g
(
n
)
=
0
g(n)=0
g(n)=0。
根据转置对称性,得
g
(
n
)
=
o
(
h
(
n
)
)
g(n)=o(h(n))
g(n)=o(h(n)),即,对任意正常数
c
c
c,存在常数
m
1
>
0
m_1>0
m1>0,使对所有
n
≥
m
1
n \geq m_1
n≥m1,有
0
≤
g
(
n
)
≤
c
h
(
n
)
0 \leq g(n) \leq ch(n)
0≤g(n)≤ch(n)。
所以,对任意正常数
c
c
c,存在常数
n
0
=
max
(
n
1
,
m
1
)
n_0=\max(n1,m1)
n0=max(n1,m1),使对所有
n
≥
n
0
n \geq n_0
n≥n0,有
0
≤
h
(
n
)
≤
c
g
(
n
)
≤
c
2
h
(
n
)
0 \leq h(n) \leq cg(n) \le c^2h(n)
0≤h(n)≤cg(n)≤c2h(n),得
0
≤
h
(
n
)
≤
c
2
h
(
n
)
0\le h(n) \le c^2 h(n)
0≤h(n)≤c2h(n),即
c
2
>
1
c^2>1
c2>1,与
c
c
c 为任意正常数相矛盾。
所以不存在函数
h
(
n
)
∈
o
(
g
(
n
)
)
∩
ω
(
g
(
n
)
)
h(n) \in o(g(n)) \cap \omega(g(n))
h(n)∈o(g(n))∩ω(g(n)),所以
o
(
g
(
n
)
)
∩
ω
(
g
(
n
)
)
o(g(n)) \cap \omega(g(n))
o(g(n))∩ω(g(n)) 是空集。
3.1-8 可以将我们的记号扩展为有两个参数
n
n
n 和
m
m
m 的情况,其中,
n
n
n 和
m
m
m 可以以不同的速率,互相独立地趋于无穷。对于给定的函数
g
(
n
,
m
)
g(n,m)
g(n,m),我们用
O
(
g
(
n
,
m
)
)
O(g(n,m))
O(g(n,m)) 表示函数集:
O
(
g
(
n
,
m
)
)
=
{
f
(
n
,
m
)
:
O(g(n,m))=\{f(n,m):
O(g(n,m))={f(n,m): 存在正整数
c
c
c,
n
0
n_0
n0 和
m
0
m_0
m0,使对所有
n
⩾
n
0
n \geqslant n_0
n⩾n0 及
m
⩾
m
0
m \geqslant m_0
m⩾m0,有
0
⩽
f
(
n
,
m
)
⩽
c
g
(
n
,
m
)
}
0 \leqslant f(n,m) \leqslant cg(n,m) \}
0⩽f(n,m)⩽cg(n,m)}。
给出对应的
Ω
(
g
(
n
,
m
)
)
\Omega(g(n,m))
Ω(g(n,m)) 和
Θ
(
g
(
n
,
m
)
)
\Theta(g(n,m))
Θ(g(n,m)) 的定义。
解:
Ω
(
g
(
n
,
m
)
)
=
{
f
(
n
,
m
)
:
\Omega(g(n,m))=\{f(n,m):
Ω(g(n,m))={f(n,m): 存在正整数
c
c
c,
n
0
n_0
n0 和
m
0
m_0
m0,使对所有
n
⩾
n
0
n \geqslant n_0
n⩾n0 及
m
⩾
m
0
m \geqslant m_0
m⩾m0,有
0
⩽
c
g
(
n
,
m
)
⩽
f
(
n
,
m
)
}
0 \leqslant cg(n,m) \leqslant f(n,m) \}
0⩽cg(n,m)⩽f(n,m)}。
Θ
(
g
(
n
,
m
)
)
=
{
f
(
n
,
m
)
:
\Theta(g(n,m))=\{f(n,m):
Θ(g(n,m))={f(n,m): 存在正整数
c
1
c_1
c1,
c
2
c_2
c2,
n
0
n_0
n0 和
m
0
m_0
m0,使对所有
n
⩾
n
0
n \geqslant n_0
n⩾n0 及
m
⩾
m
0
m \geqslant m_0
m⩾m0,有
0
⩽
c
1
g
(
n
,
m
)
⩽
f
(
n
,
m
)
⩽
c
2
g
(
n
,
m
)
}
0 \leqslant c_1g(n,m) \leqslant f(n,m) \leqslant c_2g(n,m) \}
0⩽c1g(n,m)⩽f(n,m)⩽c2g(n,m)}。
学习笔记目录:【算法导论】目录