【算法导论】第3章 函数的增长 (1)


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 nn0,有 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) } 0 \leq c_1g(n) \leq f(n) \leq c_2g(n) \} 0c1g(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 nn0,有 0 ≤ f ( n ) ≤ c g ( n ) } 0 \leq f(n) \leq cg(n) \} 0f(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 nn0,有 0 ≤ c g ( n ) ≤ f ( n ) } 0 \leq cg(n) \leq f(n) \} 0cg(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 nn0,有 0 ≤ f ( n ) ≤ c g ( n ) } 0 \leq f(n) \leq cg(n) \} 0f(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 limng(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 nn0,有 0 ≤ c g ( n ) ≤ f ( n ) } 0 \leq cg(n) \leq f(n) \} 0cg(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 limng(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 nn0
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)) 0c1(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 nm0,有 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))/2h(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 nn0
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 0c1nb(n+a)bc2nb
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 0c1(1+a/n)bc2

a ≥ 0 a \ge 0 a0 时,
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| na,则有 1 + a / n ≤ 2 1+a/n \le 2 1+a/n2,所以 ( 1 + a / n ) b ≤ 2 b (1+a/n)^b \le 2^b (1+a/n)b2b
a < 0 a < 0 a<0 时,
n ≥ 2 ∣ a ∣ n\ge 2|a| n2a,则有 1 − ∣ a ∣ / n ≥ 1 / 2 1-|a|/n\ge 1/2 1a/n1/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| na,则有 1 − ∣ a ∣ / n ≤ 1 1-|a|/n \le 1 1a/n1,所以 ( 1 + a / n ) b ≤ 1 (1+a/n)^b \le 1 (1+a/n)b1
因为 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=2a,满足条件,得证。

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 nn0,有 0 ≤ 2 n + 1 ≤ c ⋅ 2 n 0 \leq 2^{n+1} \leq c\cdot 2^n 02n+1c2n
n > 0 n>0 n>0 时, 2 n > 1 2^n>1 2n>1,由上式得, 0 ≤ 2 ≤ c 0 \le 2 \le c 02c
综上,存在正常数 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 nn0,有 0 ≤ 2 2 n ≤ c ⋅ 2 n 0 \leq 2^{2n} \leq c\cdot 2^{n} 022nc2n,即 0 ≤ 2 n ≤ c 0 \le 2^n \le c 02nc
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 c2n 恒成立。与假设矛盾,得证。

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 nn0,有 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) 0 \leq c_1g(n) \leq f(n) \leq c_2g(n) 0c1g(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 nm1,有 0 ≤ f ( n ) ≤ a g ( n ) 0 \leq f(n) \leq ag(n) 0f(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 nm2,有 0 ≤ b g ( n ) ≤ f ( n ) 0 \leq bg(n) \leq f(n) 0bg(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 nn0,有 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) 0 \leq c_1g(n) \leq f(n) \leq c_2g(n) 0c1g(n)f(n)c2g(n)
故,存在正常数 c 2 c_2 c2 n 0 n_0 n0,使对所有 n ≥ n 0 n \geq n_0 nn0,有 0 ≤ f ( n ) ≤ c 2 g ( n ) 0 \leq f(n) \leq c_2g(n) 0f(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 nn0,有 0 ≤ c 1 g ( n ) ≤ f ( n ) 0 \leq c_1g(n) \leq f(n) 0c1g(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 nn1,有 0 ≤ h ( n ) ≤ c g ( n ) 0 \leq h(n) \leq cg(n) 0h(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 nn2,有 0 ≤ c g ( n ) ≤ h ( n ) 0 \leq cg(n) \leq h(n) 0cg(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 nn0,有 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 nm1,有 0 ≤ g ( n ) ≤ c h ( n ) 0 \leq g(n) \leq ch(n) 0g(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 nn0,有 0 ≤ h ( n ) ≤ c g ( n ) ≤ c 2 h ( n ) 0 \leq h(n) \leq cg(n) \le c^2h(n) 0h(n)cg(n)c2h(n),得 0 ≤ h ( n ) ≤ c 2 h ( n ) 0\le h(n) \le c^2 h(n) 0h(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 nn0 m ⩾ m 0 m \geqslant m_0 mm0,有 0 ⩽ f ( n , m ) ⩽ c g ( n , m ) } 0 \leqslant f(n,m) \leqslant cg(n,m) \} 0f(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 nn0 m ⩾ m 0 m \geqslant m_0 mm0,有 0 ⩽ c g ( n , m ) ⩽ f ( n , m ) } 0 \leqslant cg(n,m) \leqslant f(n,m) \} 0cg(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 nn0 m ⩾ m 0 m \geqslant m_0 mm0,有 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) \} 0c1g(n,m)f(n,m)c2g(n,m)}


学习笔记目录:【算法导论】目录

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值