渐近记号
用来描述计算法渐近运行时间的记号根据定义域为自然数集 N = 0 , 1 , 2 , ⋯ N={0,1,2, \cdots} N=0,1,2,⋯ 的函数来定义。
渐近记号、函数与运行时间
- 使用渐近记号描述算法的运行时间。
- 渐近记号作用于函数。
- 渐近记号也适用刻画算法的某个方面的函数。
Θ \Theta Θ 记号
对于一个给定的函数
g
(
n
)
g(n)
g(n),用
θ
(
g
(
n
)
)
\theta(g(n))
θ(g(n)) 来表示以下函数的集合:
Θ
(
g
(
n
)
)
=
{
f
(
n
)
:
存
在
正
常
量
c
1
、
c
2
和
n
0
,
使
得
对
所
有
n
≥
n
0
,
有
0
≤
c
1
g
(
n
)
≤
f
(
n
)
≤
c
2
g
(
n
)
}
\Theta(g(n)) = \{f(n): 存在正常量 c_1、c_2 和 n_0,使得对所有 n \ge n_0,有 0 \le c_1g(n) \le f(n) \le c_2g(n)\}
Θ(g(n))={f(n):存在正常量c1、c2和n0,使得对所有n≥n0,有0≤c1g(n)≤f(n)≤c2g(n)}
若存在正常量
c
1
c_1
c1 和
c
2
c_2
c2,使得对于足够大的
n
n
n,函数
f
(
n
)
f(n)
f(n) 能“夹入”
c
1
g
(
n
)
c_1g(n)
c1g(n) 与
c
2
g
(
n
)
c_2g(n)
c2g(n) 之间,则
f
(
n
)
f(n)
f(n) 属于集合
Θ
(
g
(
n
)
)
\Theta(g(n))
Θ(g(n))。记作
f
(
n
)
∈
Θ
(
g
(
n
)
)
f(n) \in \Theta(g(n))
f(n)∈Θ(g(n)) 或
f
(
n
)
=
Θ
(
g
(
n
)
)
f(n) = \Theta(g(n))
f(n)=Θ(g(n))。
图(a)给出了函数
f
(
n
)
f(n)
f(n) 与
g
(
n
)
g(n)
g(n) 的一副直观画面,对在
n
0
n_0
n0 及其右边
n
n
n 的所有值,
f
(
n
)
f(n)
f(n) 的值位于或高于
c
1
g
(
n
)
c_1g(n)
c1g(n) 且位于或低于
c
2
g
(
n
)
c_2g(n)
c2g(n)。即对所有
n
≥
n
0
n \ge 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)) 均渐近非负,即当 n n n 足够大时, f ( n ) f(n) f(n) 非负。
证明:
1
2
n
2
−
3
n
=
Θ
(
n
2
)
\dfrac{1}{2}n^2 - 3n = \Theta(n^2)
21n2−3n=Θ(n2)。
假设有正常量
c
1
c_1
c1、
c
2
c_2
c2 和
n
0
n_0
n0,使得对所有
n
≥
n
0
n \ge n_0
n≥n0,有:
c
1
n
2
≤
1
2
n
2
−
3
n
≤
c
2
n
2
c_1n^2 \le \dfrac{1}{2}n^2-3n \le c_2n^2
c1n2≤21n2−3n≤c2n2
用
n
2
n^2
n2 除上式得:
c
1
≤
1
2
−
3
n
≤
c
2
c_1 \le \dfrac{1}{2}-\dfrac{3}{n} \le c_2
c1≤21−n3≤c2
通过选择任何常量
c
2
≥
1
/
2
c_2 \ge 1/2
c2≥1/2,可以使右边得不等式对任何
n
≥
1
n \ge 1
n≥1得值成立。同样,通过选择任何常量
c
1
≤
1
/
14
c_1 \le 1/14
c1≤1/14,可以使左边得不等式对任何
n
≥
7
n \ge 7
n≥7 的值成立。因此,通过选择
c
1
=
1
/
14
c_1=1/14
c1=1/14,
c
2
=
1
/
2
c_2=1/2
c2=1/2 且
n
0
=
7
n_0 = 7
n0=7,可以证明
1
2
n
2
−
3
n
=
Θ
(
n
2
)
\dfrac{1}{2}n^2 - 3n = \Theta(n^2)
21n2−3n=Θ(n2)。
O O O 记号
Θ
\Theta
Θ 记号渐近地给出一个函数地上界和下界。当只有一个渐近上界时,使用
O
O
O 记号。对于给定地函数
g
(
n
)
g(n)
g(n),用
O
(
g
(
n
)
)
O(g(n))
O(g(n)) 来表示以下函数的集合:
O
(
g
(
n
)
)
=
{
f
(
n
)
:
存
在
正
常
量
c
和
n
0
,
使
得
对
所
有
n
≥
n
0
,
有
0
≤
f
(
n
)
≤
c
g
(
n
)
}
O(g(n)) = \{f(n): 存在正常量 c 和 n_0,使得对所有 n \ge n_0,有 0 \le f(n) \le cg(n)\}
O(g(n))={f(n):存在正常量c和n0,使得对所有n≥n0,有0≤f(n)≤cg(n)}
使用
O
O
O记号来给出函数的一个在常量因子的上界 。
我们记
f
(
n
)
=
O
(
g
(
n
)
)
f(n) = O(g(n))
f(n)=O(g(n)) 。
f
(
n
)
=
Θ
(
g
(
n
)
)
f(n) = \Theta(g(n))
f(n)=Θ(g(n)) 蕴涵着
f
(
n
)
=
O
(
g
(
n
)
)
f(n) = O(g(n))
f(n)=O(g(n)),因为
Θ
\Theta
Θ 记号是一个比
O
O
O 更强的概念,
Θ
(
g
(
n
)
)
⊆
O
(
g
(
n
)
)
\Theta(g(n)) \subseteq O(g(n))
Θ(g(n))⊆O(g(n))。
使用 O O O 记号,我们可以仅仅通过检查算法的总体结构来描述算法的运行时间。 O O O 记号是用来表示上界的,当用它来限制算法的最坏情况运行时间时,就有对任意输入的运行时间的上界。因此,对插入排序的最坏情况运行时间的界 O ( n 2 ) O(n^2) O(n2) 也适用与该算法对每个输入的运行时间。但是,对插入排序的最坏情况运行时间的界 Θ ( n 2 ) \Theta(n^2) Θ(n2) 并未暗示插入排序对每个输入的运行时间的界也是 Θ ( n 2 ) \Theta(n^2) Θ(n2)。
当我们说“运行时间为 O ( n 2 ) O(n^2) O(n2)”时,意指存在一个 O ( n 2 ) O(n^2) O(n2) 的函数 f ( n ) f(n) f(n),使得对 n n n 的任意值,不管选择什么特定的规模为 n n n 的输入,其运行时间的上界都是 f ( n ) f(n) f(n)。也就时说最坏情况运行时间为 O ( n 2 ) O(n^2) O(n2)。
Ω \Omega Ω 记号
Ω
\Omega
Ω 记号提供了渐近下界。对于给定的函数
g
(
n
)
g(n)
g(n),用
Ω
(
g
(
n
)
)
\Omega(g(n))
Ω(g(n)) 来表示以下函数的集合:
Ω
(
g
(
n
)
)
=
{
f
(
n
)
:
存
在
正
常
量
c
和
n
0
,
使
得
对
所
有
n
≥
n
0
,
有
0
≤
c
g
(
n
)
≤
f
(
n
)
}
\Omega(g(n)) = \{f(n):存在正常量 c 和 n_0,使得对所有 n \ge n_0,有 0 \le cg(n) \le f(n)\}
Ω(g(n))={f(n):存在正常量c和n0,使得对所有n≥n0,有0≤cg(n)≤f(n)}
定理3.1 对于任意两个函数 f ( n ) f(n) f(n) 和 g ( n ) g(n) g(n),我们有 f ( n ) = Θ ( g ( n ) ) f(n)=\Theta(g(n)) f(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))。
当称一个算法的运行时间为 Ω ( g ( n ) ) \Omega(g(n)) Ω(g(n)),我们意为对每一个 n n n 值,不管选择什么特定的规模为 n n n 的输入,只要 n n n 足够大,对那个输入的运行时间至少时 g ( n ) g(n) g(n) 的常量倍。这是一个算法的最好情况运行时间的下界。
等式和不等式中的渐近记号
- 当渐近记号独立于等式(或不等式)的右边(即不在一个更大的公式内)时,如在 n = O ( n 2 ) n=O(n^2) n=O(n2) 中,等号意指集合的成员关系: n ∈ O ( n 2 ) n \in O(n^2) n∈O(n2)。
- 当渐近符号出现在某个公式中时,如 2 n 3 + 3 n + 1 = 2 n 2 + Ω 2n^3+3n+1=2n^2+\Omega 2n3+3n+1=2n2+Ω,表示某个不关注名称的匿名函数。一个表达式中匿名函数的数目可以理解为等于渐近记号出现的次数。
- 当渐近符号出现在等式的左边时,如 $2n^2 + \Theta(n) = \Theta(n^2),表示无论怎样选择等号左边的匿名函数,总有一种办法来选择等号右边的匿名函数使等式成立。
例子: 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),使得对所有的 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 记号提供的渐近上界可能是也可能不是渐近紧确的。界
2
n
2
=
O
(
n
2
)
2n^2 = O(n^2)
2n2=O(n2) 是渐近紧确的,但是界
2
n
=
O
(
n
2
)
2n=O(n^2)
2n=O(n2) 却不是。使用
o
o
o 记号来表示一个非渐近紧确的上界。定义
o
(
g
(
n
)
)
o(g(n))
o(g(n)) 为以下集合:
o
(
g
(
n
)
)
=
{
f
(
n
)
:
对
任
意
正
常
量
c
>
0
,
存
在
常
量
n
0
>
0
,
使
得
对
所
有
n
≥
n
0
,
有
0
≤
f
(
n
)
<
c
g
(
n
)
}
o(g(n)) = \{f(n):对任意正常量 c>0,存在常量 n_0 > 0,使得对所有 n \ge n_0,有 0 \le f(n) < cg(n)\}
o(g(n))={f(n):对任意正常量c>0,存在常量n0>0,使得对所有n≥n0,有0≤f(n)<cg(n)}
在
o
o
o 记号中,当
n
n
n 趋于无穷时,函数
f
(
n
)
f(n)
f(n) 相对于
g
(
n
)
g(n)
g(n) 来说变得微不足道,即 $\lim\limits_{n \to \infty}\dfrac{f(n)}{g(n)} = 0 $。
ω \omega ω 记号
ω
\omega
ω 记号与
Ω
\Omega
Ω 记号的关系类似于
o
o
o 记号与
O
O
O 记号的关系。使用
ω
\omega
ω 记号来表示一个非渐近紧确的下界。一种定义方式:
f
(
n
)
∈
ω
(
g
(
n
)
)
当
且
仅
当
g
(
n
)
∈
ω
(
f
(
n
)
)
f(n) \in \omega(g(n)) 当且仅当 g(n) \in \omega(f(n))
f(n)∈ω(g(n))当且仅当g(n)∈ω(f(n))
定义
ω
\omega
ω 为以下集合:
ω
(
g
(
n
)
)
=
{
f
(
n
)
:
对
任
意
正
常
量
c
>
0
,
存
在
常
量
n
0
>
0
,
使
得
对
所
有
n
≥
n
0
,
有
0
≤
c
g
(
n
)
<
f
(
n
)
}
\omega(g(n)) = \{f(n):对任意正常量 c>0,存在常量 n_0 > 0,使得对所有 n \ge n_0,有 0 \le cg(n) < f(n)\}
ω(g(n))={f(n):对任意正常量c>0,存在常量n0>0,使得对所有n≥n0,有0≤cg(n)<f(n)}
在
ω
\omega
ω 记号中,当
n
n
n 趋于无穷时,即 $\lim\limits_{n \to \infty}\dfrac{f(n)}{g(n)} = \infty $。
比较各种函数
f ( n ) f(n) f(n) 相对于 g ( n ) g(n) g(n) 渐近为正。
- 传递性:
f ( n ) = Θ ( g ( n ) ) ∧ g ( n ) = Θ ( h ( n ) ) ⇒ f ( n ) = Θ ( h ( n ) ) f ( n ) = O ( g ( n ) ) ∧ g ( n ) = O ( h ( n ) ) ⇒ f ( n ) = O ( h ( n ) ) f ( n ) = Ω ( g ( n ) ) ∧ g ( n ) = Ω ( h ( n ) ) ⇒ f ( n ) = Ω ( h ( n ) ) f ( n ) = o ( g ( n ) ) ∧ g ( n ) = o ( h ( n ) ) ⇒ f ( n ) = o ( h ( n ) ) f ( n ) = ω ( g ( n ) ) ∧ g ( n ) = ω ( h ( n ) ) ⇒ f ( n ) = ω ( h ( n ) ) \begin{array}{ccccc} f(n)=\Theta(g(n)) & \wedge & g(n)=\Theta(h(n)) & \Rightarrow & f(n) = \Theta(h(n)) \\ f(n)=O(g(n)) & \wedge & g(n)=O(h(n)) & \Rightarrow & f(n) = O(h(n)) \\ f(n)=\Omega(g(n)) & \wedge & g(n)=\Omega(h(n)) & \Rightarrow & f(n) = \Omega(h(n)) \\ f(n)=o(g(n)) & \wedge & g(n)=o(h(n)) & \Rightarrow & f(n) = o(h(n)) \\ f(n)=\omega(g(n)) & \wedge & g(n)=\omega(h(n)) & \Rightarrow & f(n) = \omega(h(n)) \end{array} f(n)=Θ(g(n))f(n)=O(g(n))f(n)=Ω(g(n))f(n)=o(g(n))f(n)=ω(g(n))∧∧∧∧∧g(n)=Θ(h(n))g(n)=O(h(n))g(n)=Ω(h(n))g(n)=o(h(n))g(n)=ω(h(n))⇒⇒⇒⇒⇒f(n)=Θ(h(n))f(n)=O(h(n))f(n)=Ω(h(n))f(n)=o(h(n))f(n)=ω(h(n)) - 自反性:
f ( n ) = Θ ( f ( n ) ) f ( n ) = O ( f ( n ) ) f ( n ) = Ω ( f ( n ) ) \begin{array}{c} f(n)=\Theta(f(n)) \\ f(n)=O(f(n)) \\ f(n)=\Omega(f(n)) \end{array} f(n)=Θ(f(n))f(n)=O(f(n))f(n)=Ω(f(n)) - 对称性:
f ( n ) = Θ ( g ( n ) ) 当 且 仅 当 g ( n ) = Θ ( f ( n ) ) f(n)=\Theta(g(n)) 当且仅当 g(n)=\Theta(f(n)) f(n)=Θ(g(n))当且仅当g(n)=Θ(f(n)) - 转置对称性:
f ( n ) = O ( g ( n ) ) 当 且 仅 当 g ( n ) = Ω ( f ( n ) ) f ( n ) = o ( g ( n ) ) 当 且 仅 当 g ( n ) = ω ( f ( n ) ) \begin{array}{c} f(n)=O(g(n)) 当且仅当 g(n)=\Omega(f(n)) \\ f(n)=o(g(n)) 当且仅当 g(n)=\omega(f(n)) \end{array} f(n)=O(g(n))当且仅当g(n)=Ω(f(n))f(n)=o(g(n))当且仅当g(n)=ω(f(n))
练习
3.1-1
假设
f
(
n
)
f(n)
f(n) 与
g
(
n
)
g(n)
g(n) 都是渐近非负函数。使用
Θ
\Theta
Θ 记号的基本定义来证明
m
a
x
(
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
Θ 记号的基本定义:
Θ
(
g
(
n
)
)
=
{
f
(
n
)
:
存
在
正
常
量
c
1
、
c
2
和
n
0
,
使
得
对
所
有
n
≥
n
0
,
有
0
≤
c
1
g
(
n
)
≤
f
(
n
)
≤
c
2
g
(
n
)
}
\Theta(g(n)) = \{f(n): 存在正常量 c_1、c_2 和 n_0,使得对所有 n \ge n_0,有 0 \le c_1g(n) \le f(n) \le c_2g(n)\}
Θ(g(n))={f(n):存在正常量c1、c2和n0,使得对所有n≥n0,有0≤c1g(n)≤f(n)≤c2g(n)}
将
m
a
x
(
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)) 按定义展开:
0
≤
c
1
(
f
(
n
)
+
g
(
n
)
)
≤
m
a
x
(
f
(
n
)
,
g
(
n
)
)
≤
c
2
(
f
(
n
)
+
g
(
n
)
)
0 \le c_1(f(n) + g(n)) \le max(f(n), g(n)) \le 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) 都是渐近非负函数,所以
f
(
n
)
+
g
(
n
)
f(n) + g(n)
f(n)+g(n) 和
m
a
x
(
f
(
n
)
,
g
(
n
)
)
max(f(n), g(n))
max(f(n),g(n)) 必然 > 0。
假设 m a x ( f ( n ) , g ( n ) ) = f ( n ) max(f(n), g(n)) = f(n) max(f(n),g(n))=f(n),因为 g ( n ) ≤ f ( n ) g(n) \le f(n) g(n)≤f(n),所以 1 2 ( f ( n ) + g ( n ) ) ≤ f ( n ) \dfrac{1}{2}(f(n) + g(n)) \le f(n) 21(f(n)+g(n))≤f(n) 且 f ( n ) ≤ ( f ( n ) + g ( n ) ) f(n) \le (f(n) + g(n)) f(n)≤(f(n)+g(n))。因此在 c 1 = 1 2 c_1 = \dfrac{1}{2} c1=21 和 c 2 = 1 c_2 = 1 c2=1 时,满足 Θ \Theta Θ 的定义。同理,当 m a x ( f ( n ) , g ( n ) ) = g ( n ) max(f(n), g(n)) = g(n) max(f(n),g(n))=g(n) 时,也满足 Θ \Theta Θ 的定义。
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)。
解:
(
n
+
a
)
b
=
∑
i
=
0
b
C
b
i
n
b
−
i
b
i
=
Θ
(
n
b
)
\begin{array}{lcl} (n+a)^b &=& \sum\limits^b_{i=0}C^i_bn^{b-i}b^i \\ &=& \Theta(n^b) \end{array}
(n+a)b==i=0∑bCbinb−ibiΘ(nb)
3.1-3
解释为什么“算法A的运行时间至少是
O
(
n
2
)
O(n^2)
O(n2)”这一表述是无意义的。
解:
O
O
O记号用来表示渐近上界,而至少表示是下界。
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) 成立吗?
解:
- 成立,当 c ≥ 2 c \ge 2 c≥2 时。
- 不成立,不存在正常量 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) 成立。 2 2 n = O ( 4 n ) 2^{2n} = O(4^n) 22n=O(4n)。
3.1-5
证明:对于任意两个函数
f
(
n
)
f(n)
f(n) 和
g
(
n
)
g(n)
g(n),我们有
f
(
n
)
=
Θ
(
g
(
n
)
)
f(n)=\Theta(g(n))
f(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)) 的充分必要条件是
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)) 的充分条件是 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))
根据
Θ
\Theta
Θ 的定义:
Θ
(
g
(
n
)
)
=
{
f
(
n
)
:
存
在
正
常
量
c
1
、
c
2
和
n
0
,
使
得
对
所
有
n
≥
n
0
,
有
0
≤
c
1
g
(
n
)
≤
f
(
n
)
≤
c
2
g
(
n
)
}
\Theta(g(n)) = \{f(n): 存在正常量 c_1、c_2 和 n_0,使得对所有 n \ge n_0,有 0 \le c_1g(n) \le f(n) \le c_2g(n)\}
Θ(g(n))={f(n):存在正常量c1、c2和n0,使得对所有n≥n0,有0≤c1g(n)≤f(n)≤c2g(n)}
可得:
存
在
正
常
量
c
1
和
n
0
,
使
得
对
所
有
n
≥
n
0
,
0
≤
c
1
g
(
n
)
≤
f
(
n
)
成
立
∧
存
在
正
常
量
c
2
和
n
0
,
使
得
对
所
有
n
≥
n
0
,
0
≤
f
(
n
)
≤
c
2
g
(
n
)
成
立
存在正常量 c_1 和 n_0,使得对所有 n \ge n_0,0 \le c_1g(n) \le f(n)成立 \wedge 存在正常量 c_2 和 n_0,使得对所有 n \ge n_0,0 \le f(n) \le c_2g(n) 成立
存在正常量c1和n0,使得对所有n≥n0,0≤c1g(n)≤f(n)成立∧存在正常量c2和n0,使得对所有n≥n0,0≤f(n)≤c2g(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))
根据
O
O
O 和
Ω
\Omega
Ω 的定义:
Ω
(
g
(
n
)
)
=
{
f
(
n
)
:
存
在
正
常
量
c
1
和
n
1
,
使
得
对
所
有
n
≥
n
1
,
有
0
≤
c
1
g
(
n
)
≤
f
(
n
)
}
O
(
g
(
n
)
)
=
{
f
(
n
)
:
存
在
正
常
量
c
2
和
n
2
,
使
得
对
所
有
n
≥
n
2
,
有
0
≤
f
(
n
)
≤
c
2
g
(
n
)
}
\begin{array}{rcl} \Omega(g(n)) &=& \{f(n):存在正常量 c_1 和 n_1,使得对所有 n \ge n_1,有 0 \le c_1g(n) \le f(n)\} \\ O(g(n)) &=& \{f(n): 存在正常量 c_2 和 n_2,使得对所有 n \ge n_2,有 0 \le f(n) \le c_2g(n)\} \end{array}
Ω(g(n))O(g(n))=={f(n):存在正常量c1和n1,使得对所有n≥n1,有0≤c1g(n)≤f(n)}{f(n):存在正常量c2和n2,使得对所有n≥n2,有0≤f(n)≤c2g(n)}
因为
n
≥
n
1
n \ge n_1
n≥n1 且
n
≥
n
2
n \ge n_2
n≥n2 必然有
n
≥
(
n
0
=
n
1
=
n
2
)
n \ge (n_0 = n_1 = n_2)
n≥(n0=n1=n2)。因此可得:
存
在
正
常
量
c
1
、
c
2
和
n
0
,
使
得
对
所
有
n
≥
n
0
,
有
0
≤
c
1
g
(
n
)
≤
f
(
n
)
≤
c
2
g
(
n
)
存在正常量 c_1、c_2 和 n_0,使得对所有 n \ge n_0,有 0 \le c_1g(n) \le f(n) \le c_2g(n)
存在正常量c1、c2和n0,使得对所有n≥n0,有0≤c1g(n)≤f(n)≤c2g(n)
必要性得证。
即 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(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))。
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))。
解:
对于一个算法的最坏情况运行时间为
O
(
g
(
n
)
)
O(g(n))
O(g(n)),且其最好运行时间为
Ω
(
g
(
n
)
)
\Omega(g(n))
Ω(g(n))来说,
g
(
n
)
g(n)
g(n)是紧确的上下界,那么算法的任意运行时间和
g
(
n
)
g(n)
g(n) 之间便是齐次的,我们即可以将其写为
f
(
n
)
f(n)
f(n)。则可由定理:
对于任意两个函数 f ( n ) f(n) f(n) 和 g ( n ) g(n) g(n),我们有 f ( n ) = Θ ( g ( n ) ) f(n)=\Theta(g(n)) f(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))。
证明。
3.1-7
证明:
o
(
g
(
n
)
)
∩
ω
(
g
(
n
)
)
o(g(n)) \cap \omega(g(n))
o(g(n))∩ω(g(n)) 为空集。
解:
在
o
o
o 记号中,当
n
n
n 趋于无穷时,即
lim
n
→
∞
f
(
n
)
g
(
n
)
=
0
\lim\limits_{n \to \infty}\dfrac{f(n)}{g(n)} = 0
n→∞limg(n)f(n)=0。
在 ω \omega ω 记号中,当 n n n 趋于无穷时,即 lim n → ∞ f ( n ) g ( n ) = ∞ \lim\limits_{n \to \infty}\dfrac{f(n)}{g(n)} = \infty n→∞limg(n)f(n)=∞。
因为 0 ≠ ∞ 0 \neq \infty 0̸=∞ 那么 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
)
:
存
在
正
常
量
c
、
n
0
和
m
0
,
使
得
对
所
有
n
≥
n
0
或
m
≥
m
0
,
有
0
≤
f
(
n
,
m
)
≤
c
g
(
n
,
m
)
}
O(g(n, m)) = \{f(n, m): 存在正常量 c、n_0和m_0,使得对所有 n \ge n_0 或 m \ge m_0,有 0 \le f(n, m) \le cg(n, m) \}
O(g(n,m))={f(n,m):存在正常量c、n0和m0,使得对所有n≥n0或m≥m0,有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
)
:
存
在
正
常
量
c
、
n
0
和
m
0
,
使
得
对
所
有
n
≥
n
0
或
m
≥
m
0
,
有
0
≤
c
g
(
n
,
m
)
≤
f
(
n
,
m
)
}
\Omega(g(n, m)) = \{f(n, m): 存在正常量 c、n_0和m_0,使得对所有 n \ge n_0 或 m \ge m_0,有 0 \le cg(n, m) \le f(n, m)\}
Ω(g(n,m))={f(n,m):存在正常量c、n0和m0,使得对所有n≥n0或m≥m0,有0≤cg(n,m)≤f(n,m)}
Θ
(
g
(
n
,
m
)
)
=
{
f
(
n
,
m
)
:
存
在
正
常
量
c
1
、
c
2
、
n
0
和
m
0
,
使
得
对
所
有
n
≥
n
0
或
m
≥
m
0
,
有
0
≤
c
1
g
(
n
,
m
)
≤
f
(
n
,
m
)
≤
c
2
g
(
n
,
m
)
}
\Theta(g(n, m)) = \{f(n, m): 存在正常量 c_1、c_2、n_0和m_0,使得对所有 n \ge n_0 或 m \ge m_0,有 0 \le c_1g(n, m) \le f(n, m) \le c_2g(n, m) \}
Θ(g(n,m))={f(n,m):存在正常量c1、c2、n0和m0,使得对所有n≥n0或m≥m0,有0≤c1g(n,m)≤f(n,m)≤c2g(n,m)}