
本文共 14640 字,大约阅读时间需要 48 分钟。
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)}。
学习笔记目录:
发表评论
最新留言
关于作者
