算法导论 第三章 函数的增长 (5) 渐近记号

渐近记号

用来描述计算法渐近运行时间的记号根据定义域为自然数集 N = 0 , 1 , 2 , ⋯ N={0,1,2, \cdots} N=0,1,2, 的函数来定义。

渐近记号、函数与运行时间

  1. 使用渐近记号描述算法的运行时间。
  2. 渐近记号作用于函数。
  3. 渐近记号也适用刻画算法的某个方面的函数。

Θ \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):c1c2n0使nn00c1g(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 nn0,函数 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) 21n23n=Θ(n2)
假设有正常量 c 1 c_1 c1 c 2 c_2 c2 n 0 n_0 n0,使得对所有 n ≥ n 0 n \ge n_0 nn0,有:
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 c1n221n23nc2n2
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 c121n3c2
通过选择任何常量 c 2 ≥ 1 / 2 c_2 \ge 1/2 c21/2,可以使右边得不等式对任何 n ≥ 1 n \ge 1 n1得值成立。同样,通过选择任何常量 c 1 ≤ 1 / 14 c_1 \le 1/14 c11/14,可以使左边得不等式对任何 n ≥ 7 n \ge 7 n7 的值成立。因此,通过选择 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) 21n23n=Θ(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):cn0使nn00f(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):cn0使nn00cg(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) 的常量倍。这是一个算法的最好情况运行时间的下界。

等式和不等式中的渐近记号

  1. 当渐近记号独立于等式(或不等式)的右边(即不在一个更大的公式内)时,如在 n = O ( n 2 ) n=O(n^2) n=O(n2) 中,等号意指集合的成员关系: n ∈ O ( n 2 ) n \in O(n^2) nO(n2)
  2. 当渐近符号出现在某个公式中时,如 2 n 3 + 3 n + 1 = 2 n 2 + Ω 2n^3+3n+1=2n^2+\Omega 2n3+3n+1=2n2+Ω,表示某个不关注名称的匿名函数。一个表达式中匿名函数的数目可以理解为等于渐近记号出现的次数。
  3. 当渐近符号出现在等式的左边时,如 $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)

  1. 第一个等式表示存在某个函数 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)
  2. 第二个等式表示对任意函数 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 &gt; 0 , 存 在 常 量 n 0 &gt; 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ f ( n ) &lt; c g ( n ) } o(g(n)) = \{f(n):对任意正常量 c&gt;0,存在常量 n_0 &gt; 0,使得对所有 n \ge n_0,有 0 \le f(n) &lt; cg(n)\} o(g(n))={f(n):c>0n0>0使nn00f(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 &gt; 0 , 存 在 常 量 n 0 &gt; 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ c g ( n ) &lt; f ( n ) } \omega(g(n)) = \{f(n):对任意正常量 c&gt;0,存在常量 n_0 &gt; 0,使得对所有 n \ge n_0,有 0 \le cg(n) &lt; f(n)\} ω(g(n))={f(n):c>0n0>0使nn00cg(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)) &amp; \wedge &amp; g(n)=\Theta(h(n)) &amp; \Rightarrow &amp; f(n) = \Theta(h(n)) \\ f(n)=O(g(n)) &amp; \wedge &amp; g(n)=O(h(n)) &amp; \Rightarrow &amp; f(n) = O(h(n)) \\ f(n)=\Omega(g(n)) &amp; \wedge &amp; g(n)=\Omega(h(n)) &amp; \Rightarrow &amp; f(n) = \Omega(h(n)) \\ f(n)=o(g(n)) &amp; \wedge &amp; g(n)=o(h(n)) &amp; \Rightarrow &amp; f(n) = o(h(n)) \\ f(n)=\omega(g(n)) &amp; \wedge &amp; g(n)=\omega(h(n)) &amp; \Rightarrow &amp; 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):c1c2n0使nn00c1g(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)) 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) 都是渐近非负函数,所以 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 &gt; 0 b &gt; 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 &amp;=&amp; \sum\limits^b_{i=0}C^i_bn^{b-i}b^i \\ &amp;=&amp; \Theta(n^b) \end{array} (n+a)b==i=0bCbinbibiΘ(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) 成立吗?
解:

  1. 成立,当 c ≥ 2 c \ge 2 c2 时。
  2. 不成立,不存在正常量 c c c n 0 n_0 n0,使得对所有 n ≥ n 0 n \ge n_0 nn0,有 0 ≤ f ( n ) ≤ c g ( n ) 0 \le f(n) \le cg(n) 0f(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):c1c2n0使nn00c1g(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) 成立 c1n0使nn00c1g(n)f(n)c2n0使nn00f(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)) &amp;=&amp; \{f(n):存在正常量 c_1 和 n_1,使得对所有 n \ge n_1,有 0 \le c_1g(n) \le f(n)\} \\ O(g(n)) &amp;=&amp; \{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):c1n1使nn10c1g(n)f(n)}{f(n):c2n2使nn20f(n)c2g(n)}
因为 n ≥ n 1 n \ge n_1 nn1 n ≥ n 2 n \ge n_2 nn2 必然有 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) c1c2n0使nn00c1g(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 nlimg(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 nlimg(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):cn0m0使nn0mm00f(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):cn0m0使nn0mm00cg(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):c1c2n0m0使nn0mm00c1g(n,m)f(n,m)c2g(n,m)}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值