算法导论 — 3.1 渐近记号

笔记

通常我们分析一个算法,不用去关心它的精确运行时间,而是要研究它的渐近效率。 “ “ 渐近 ” ” 在这里的意思是,当输入规模足够大时,并且输入规模趋向于 ∞ ∞ 时,算法运行时间的增长能体现出某种明显的规律性,即算法的运行时间按照某种特定的规律随输入规模的变大而增长。
  在第2章中,我们介绍了两种排序算法:插入排序和归并排序,它们的渐近运行时间分别为 Θ ( n 2 ) Θ(n^2) Θ(n2) Θ ( n l g n ) Θ(n{\rm lg}n) Θ(nlgn)。这说明,当输入规模足够大时,插入排序的运行时间比归并排序运行时间增长要快。一旦输入规模足够大,归并排序在运行效率上将战胜插入排序。
  本节介绍几种渐近记号,可以用来描述算法的渐近运行时间。
  
  (1) Θ Θ Θ记号
  定义:给定一个函数 g ( n ) g(n) g(n),用 Θ ( g ( n ) ) Θ(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 ) } Θ(g(n)) = \{ f(n):存在正常量c_1、c_2和n_0,使得对所有n ≥ n_0,有0 ≤ c_1g(n) ≤ f(n) ≤ c_2g(n) \} Θ(g(n))={f(n)c1c2n0使nn00c1g(n)f(n)c2g(n)}
  
  准确来说 Θ ( g ( n ) ) Θ(g(n)) Θ(g(n))是一个集合。但我们习惯用 “ f ( n ) = Θ ( g ( n ) ) ” “f(n) = Θ(g(n))” 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))的直观意义是:存在正常量 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)之间。也就是说,当 n n n足够大时, f ( n ) f(n) f(n) g ( n ) g(n) g(n)的比值是在一个有限正实数范围内的。这个比值可能随 n n n的变化而有所不同,但是只要 n n n足够大,不管 n n n为多少,这个比值总是在有限正实数范围 [ c 1 , c 2 ] [c_1, c_2] [c1,c2]内。我们称 g ( n ) g(n) g(n) f ( n ) f(n) f(n)的一个渐近紧确界,也就是说 g ( n ) g(n) g(n)既可以表示 f ( n ) f(n) f(n)渐近上界,也可以表示 f ( n ) f(n) f(n)渐近下界,区别就是上界和下界所乘的常量因子 c 1 c_1 c1 c 2 c_2 c2不同。
  下面举一个例子,用上面的定义来证明 1 2 n 2 − 3 n = Θ ( n 2 ) \frac{1}{2}n^2-3n=Θ(n^2) 21n23n=Θ(n2)。根据 Θ Θ Θ记号的定义,我们需要找到正常量 c 1 c_1 c1 c 2 c_2 c2 n 0 n_0 n0,使得对所有 n ≥ n 0 n ≥ n_0 nn0,有
   c 1 n 2 ≤ 1 2 n 2 − 3 n ≤ c 2 n 2 c_1 n^2≤\frac{1}{2}n^2-3n≤c_2 n^2 c1n221n23nc2n2
  将上式除以 n 2 n^2 n2,得到
   c 1 ≤ 1 2 − 3 n ≤ c 2 c_1≤\frac{1}{2}-\frac{3}{n}≤c_2 c121n3c2
  通过选择任意常量 c 2 ≥ 1 / 2 c_2 ≥ 1/2 c21/2,可以使右边的不等式对任何 n ≥ 1 n ≥ 1 n1成立。同样,通过选择 c 1 ≤ 1 / 14 c_1 ≤ 1/14 c11/14,可以使得左边的不等式对任何 n ≥ 7 n ≥ 7 n7成立。因此,选择 c 1 ≤ 1 / 14 、 c 2 ≥ 1 / 2 和 n ≥ 7 c_1 ≤ 1/14、c_2 ≥ 1/2和n ≥ 7 c11/14c21/2n7,可以使得以上不等式成立,故 1 2 n 2 − 3 n = Θ ( n 2 ) \frac{1}{2}n^2-3n=Θ(n^2) 21n23n=Θ(n2)得证。
  
  (2) O {\rm O} O记号
  与 Θ Θ Θ记号不同, O {\rm O} O记号只给出函数的渐近上界
  定义:给定一个函数 g ( n ) g(n) g(n),用 O ( g ( n ) ) {\rm O}(g(n)) O(g(n))来表示以下函数的集合:
   O ( g ( n ) ) = { f ( n ) : 存 在 正 常 量 c 和 n 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ f ( n ) ≤ c g ( n ) } {\rm O}(g(n)) = \{ f(n):存在正常量c和n_0,使得对所有n ≥ n_0,有0 ≤ f(n) ≤ cg(n) \} O(g(n))={f(n)cn0使nn00f(n)cg(n)}
  
  如果 f ( n ) = O ( g ( n ) ) f(n) = {\rm O}(g(n)) f(n)=O(g(n)),说明当 n n n足够大时, f ( n ) f(n) f(n) g ( n ) g(n) g(n)的比值总是不超过一个正常量 c c c。显然, f ( n ) = Θ ( g ( n ) ) f(n) = Θ(g(n)) f(n)=Θ(g(n))蕴含了 f ( n ) = O ( g ( n ) ) f(n) = {\rm O}(g(n)) f(n)=O(g(n))
  
  (3) Ω Ω Ω记号
   Ω Ω Ω记号只给出函数的渐近下界
  定义:给定一个函数 g ( n ) g(n) g(n),用 Ω ( g ( n ) ) Ω(g(n)) Ω(g(n))来表示以下函数的集合:
   Ω ( g ( n ) ) = { f ( n ) : 存 在 正 常 量 c 和 n 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ c g ( n ) ≤ f ( n ) } Ω(g(n)) = \{ f(n):存在正常量c和n_0,使得对所有n ≥ n_0,有0 ≤ cg(n) ≤ f(n) \} Ω(g(n))={f(n)cn0使nn00cg(n)f(n)}
  
  如果 f ( n ) = Ω ( g ( n ) ) f(n) = Ω(g(n)) f(n)=Ω(g(n)),说明当 n n n足够大时, f ( n ) f(n) f(n) g ( n ) g(n) g(n)的比值总是不小于一个正常量 c c c。显然, f ( n ) = Θ ( g ( n ) ) f(n) = Θ(g(n)) f(n)=Θ(g(n))也蕴含了 f ( n ) = Ω ( g ( n ) ) f(n) = Ω(g(n)) f(n)=Ω(g(n))
  
   (4) o {\rm o} o记号
   o {\rm o} o记号用来表示函数的一个非渐近紧确的上界。
   定义:给定一个函数 g ( n ) g(n) g(n),用 o ( g ( n ) ) {\rm o}(g(n)) o(g(n))来表示以下函数的集合:
   o ( g ( n ) ) = { f ( n ) : 对 任 意 正 常 量 c , 存 在 n 0 &gt; 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ f ( n ) &lt; c g ( n ) } {\rm o}(g(n)) = \{ f(n):对任意正常量c,存在n_0 &gt; 0,使得对所有n ≥ n_0,有0 ≤ f(n) &lt; cg(n) \} o(g(n))={f(n)cn0>0使nn00f(n)<cg(n)}
  
   对比 O ( g ( n ) ) {\rm O}(g(n)) O(g(n))的定义可以看到, O ( g ( n ) ) {\rm O}(g(n)) O(g(n))要求 f ( n ) ≤ c g ( n ) f(n) ≤ cg(n) f(n)cg(n),而 o ( g ( n ) ) {\rm o}(g(n)) o(g(n))要求 f ( n ) &lt; c g ( n ) f(n) &lt; cg(n) f(n)<cg(n),并且对任意 c &gt; 0 c&gt;0 c>0都能满足。因此, o {\rm o} o记号给出的上界不是渐近紧确的,而 O {\rm O} O记号给出的上界有可能是渐近紧确的。
   还可以用极限来定义 o {\rm o} o记号:如果 l i m n → ∞ ⁡ f ( n ) g ( n ) = 0 lim_{n→∞}⁡\frac{f(n)}{g(n)}=0 limng(n)f(n)=0,那么 f ( n ) = o ( g ( n ) ) f(n) = {\rm o}(g(n)) f(n)=o(g(n))
  
   (4) ω ω ω记号
   ω ω ω记号用来表示函数的一个非渐近紧确的下界。
   定义:给定一个函数 g ( n ) g(n) g(n),用 ω ( g ( n ) ) ω(g(n)) ω(g(n))来表示以下函数的集合:
   ω ( g ( n ) ) = { f ( n ) : 对 任 意 正 常 量 c , 存 在 n 0 &gt; 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ c g ( n ) &lt; f ( n ) } ω(g(n)) = \{ f(n):对任意正常量c,存在n_0 &gt; 0,使得对所有n ≥ n_0,有0 ≤ cg(n) &lt; f(n) \} ω(g(n))={f(n)cn0>0使nn00cg(n)<f(n)}
  
   对比 Ω ( g ( n ) ) Ω(g(n)) Ω(g(n))的定义可以看到, Ω ( g ( n ) ) Ω(g(n)) Ω(g(n))要求 c g ( n ) ≤ f ( n ) cg(n) ≤ f(n) cg(n)f(n),而 ω ( g ( n ) ) ω(g(n)) ω(g(n))要求 c g ( n ) &lt; f ( n ) cg(n) &lt; f(n) cg(n)<f(n),并且对任意 c &gt; 0 c&gt;0 c>0都能满足。因此, ω ω ω记号给出的下界不是渐近紧确的,而 Ω Ω Ω记号给出的下界有可能是渐近紧确的。
   同样可以用极限来定义 ω ω ω记号:如果 l i m n → ∞ ⁡ g ( n ) f ( n ) = 0 lim_{n→∞}⁡\frac{g(n)}{f(n)}=0 limnf(n)g(n)=0,那么 f ( n ) = ω ( g ( n ) ) f(n) = ω(g(n)) f(n)=ω(g(n))
  
   通常在算法分析中, Θ Θ Θ O {\rm O} O Ω Ω Ω记号用得相对多一些,而 o {\rm o} o ω ω ω记号相对少用。我们分析算法,自然更希望得到算法的渐近紧确界。下图直观展示了 Θ Θ Θ O {\rm O} O Ω Ω Ω记号的意义。
   在这里插入图片描述
   下面给出了渐近记号的一些性质。
   ① 传递性
   f ( n ) = Θ ( g ( n ) ) 且 g ( n ) = Θ ( h ( n ) )     ⇒     f ( n ) = Θ ( h ( n ) ) f(n) = Θ(g(n))且g(n) = Θ(h(n))   ⇒   f(n) = Θ(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) = {\rm O}(g(n))且g(n) = {\rm O}(h(n))   ⇒   f(n) = {\rm O}(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) = Ω(g(n))且g(n) = Ω(h(n))   ⇒   f(n) = Ω(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) = {\rm o}(g(n))且g(n) = {\rm o}(h(n))   ⇒   f(n) = {\rm o}(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) = ω(g(n))且g(n) = Ω(h(n))   ⇒   f(n) = ω(h(n)) f(n)=ω(g(n))g(n)=Ω(h(n))    f(n)=ω(h(n))
   ② 自反性
   f ( n ) = Θ ( f ( n ) ) f(n) = Θ(f(n)) f(n)=Θ(f(n))
   f ( n ) = O ( f ( n ) ) f(n) = {\rm O}(f(n)) f(n)=O(f(n))
   f ( n ) = Ω ( f ( n ) ) f(n) = Ω(f(n)) f(n)=Ω(f(n))
   ③ 对称性
   f ( n ) = Θ ( g ( n ) )     ⇔     g ( n ) = Θ ( f ( n ) ) f(n) = Θ(g(n))   ⇔   g(n) = Θ(f(n)) f(n)=Θ(g(n))    g(n)=Θ(f(n))
   ④ 转置对称性
   f ( n ) = O ( g ( n ) )     ⇔     g ( n ) = Ω ( f ( n ) ) f(n) = {\rm O}(g(n))   ⇔   g(n) = Ω(f(n)) f(n)=O(g(n))    g(n)=Ω(f(n))
   f ( n ) = o ( g ( n ) )     ⇔     g ( n ) = ω ( f ( n ) ) f(n) = {\rm o}(g(n))   ⇔   g(n) = ω(f(n)) f(n)=o(g(n))    g(n)=ω(f(n))
  
   还有一个性质比较重要,即
   f ( n ) = Θ ( g ( n ) )     ⇔     f ( n ) = O ( g ( n ) ) 且 f ( n ) = Ω ( g ( n ) ) f(n) = Θ(g(n))   ⇔   f(n) = {\rm O}(g(n))且f(n) = Ω(g(n)) f(n)=Θ(g(n))    f(n)=O(g(n))f(n)=Ω(g(n))

练习

3.1-1 假设 f ( n ) f(n) f(n) g ( n ) g(n) g(n)都是渐近非负函数。使用 Θ Θ Θ记号的基本定义来证明 m a x ( f ( n ) , g ( n ) ) = Θ ( f ( n ) + g ( n ) ) {\rm max}(f(n), g(n)) = Θ(f(n) + g(n)) max(f(n),g(n))=Θ(f(n)+g(n))
  
   由于 f ( n ) f(n) f(n) g ( n ) g(n) g(n)都是渐近非负函数,所以存在一个 n 0 n_0 n0,使得对所有 n ≥ n 0 n ≥ n_0 nn0,有 f ( n ) ≥ 0 f(n) ≥ 0 f(n)0 g ( n ) ≥ 0 g(n) ≥ 0 g(n)0
   取 c 1 = 1 / 2 c_1 = 1/2 c1=1/2,当 n ≥ n 0 n ≥ n_0 nn0时,如果 f ( n ) ≥ g ( n ) f(n) ≥ g(n) f(n)g(n),则 m a x ( f ( n ) , g ( n ) ) = f ( n ) ≥ ( f ( n ) + g ( n ) ) / 2 = c 1 ( f ( n ) + g ( n ) ) {\rm max}(f(n), g(n)) = f(n) ≥ (f(n) + g(n)) / 2 = c_1 (f(n) + g(n)) max(f(n),g(n))=f(n)(f(n)+g(n))/2=c1(f(n)+g(n))。如果 f ( n ) &lt; g ( n ) f(n) &lt; g(n) f(n)<g(n),同理可证 m a x ( f ( n ) , g ( n ) ) ≥ c 1 ( f ( n ) + g ( n ) ) {\rm max}(f(n), g(n)) ≥ c_1 (f(n) + g(n)) max(f(n),g(n))c1(f(n)+g(n))
   取 c 2 = 1 c_2 = 1 c2=1,当 n ≥ n 0 n ≥ n_0 nn0时,如果 f ( n ) ≥ g ( n ) f(n) ≥ g(n) f(n)g(n),则 m a x ( f ( n ) , g ( n ) ) = f ( n ) ≤ f ( n ) + g ( n ) = c 2 ( f ( n ) + g ( n ) ) {\rm max}(f(n), g(n)) = f(n) ≤ f(n) + g(n) = c_2 (f(n) + g(n)) max(f(n),g(n))=f(n)f(n)+g(n)=c2(f(n)+g(n))。如果 f ( n ) &lt; g ( n ) f(n) &lt; g(n) f(n)<g(n),同理可证 m a x ( f ( n ) , g ( n ) ) ≤ c 2 ( f ( n ) + g ( n ) ) {\rm max}(f(n), g(n)) ≤ c_2 (f(n) + g(n)) max(f(n),g(n))c2(f(n)+g(n))
   综上所述,选取一个足够大的 n 0 n_0 n0,并且取 c 1 = 1 / 2 c_1 = 1/2 c1=1/2 c 2 = 1 c_2 = 1 c2=1,当 n ≥ n 0 n ≥ n_0 nn0时, 0 ≤ c 1 ( f ( n ) + g ( n ) ) ≤ m a x ( f ( n ) , g ( n ) ) ≤ c 2 ( f ( n ) + g ( n ) ) 0 ≤ c_1 (f(n) + g(n)) ≤ {\rm max}(f(n), g(n)) ≤ c_2 (f(n) + g(n)) 0c1(f(n)+g(n))max(f(n),g(n))c2(f(n)+g(n))成立,所以 m a x ( f ( n ) , g ( n ) ) = Θ ( f ( n ) + g ( n ) ) {\rm max}(f(n), g(n)) = Θ(f(n) + g(n)) max(f(n),g(n))=Θ(f(n)+g(n))
  
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 = Θ(n^b) (n+a)b=Θ(nb)
  
   ( n + a ) b = Θ ( n b ) (n+a)^b = Θ(n^b) (n+a)b=Θ(nb)意味着存在 c 1 &gt; 0 c_1 &gt; 0 c1>0 c 2 &gt; 0 c_2 &gt; 0 c2>0 n 0 &gt; 0 n_0 &gt; 0 n0>0,使得对所有 n ≥ n 0 n ≥ n_0 nn0,有 0 ≤ c 1 n b ≤ ( n + a ) b ≤ c 2 n b 0 ≤ c_1n^b ≤ (n+a)^b ≤ c_2n^b 0c1nb(n+a)bc2nb
  
   (1) 先证明不等式 ( n + a ) b ≥ c 1 n b (n+a)^b ≥ c_1n^b (n+a)bc1nb。将不等式两边都除以 n b n^b nb,有
  
   ( 1 + a n ) b ≥ c 1     ⇔     1 + a n ≥ c 1 1 / b     ⇔     a n ≥ c 1 1 / b − 1 (1+\frac{a}{n})^b≥c_1   ⇔   1+\frac{a}{n}≥{c_1}^{1/b}   ⇔   \frac{a}{n}≥{c_1}^{1/b}-1 (1+na)bc1    1+nac11/b    nac11/b1
  
   取任意 0 &lt; c 1 &lt; 1 0 &lt; c_1 &lt; 1 0<c1<1,由于 b &gt; 0 b &gt; 0 b>0,故 0 &lt; c 1 1 / b &lt; 1 0&lt;{c_1}^{1/b}&lt;1 0<c11/b<1,所以 c 1 1 / b − 1 &lt; 0 {c_1}^{1/b}-1&lt;0 c11/b1<0。于是上面的不等式可以变换为 n ≥ a ( c 1 1 / b − 1 ) n≥\frac{a}{({c_1}^{1/b}-1)} n(c11/b1)a
  
   这意味着任取 0 &lt; c 1 &lt; 1 0 &lt; c_1 &lt; 1 0<c1<1,都可以找到一个大于或等于 a ( c 1 1 / b − 1 ) \frac{a}{({c_1}^{1/b}-1)} (c11/b1)a n 0 n_0 n0,使得对所有 n ≥ n 0 n ≥ n_0 nn0,有 ( n + a ) b ≥ c 1 n b (n+a)^b ≥ c_1n^b (n+a)bc1nb都成立。
  
   (2) 用同样的方法可证明,取任意 c 2 &gt; 1 c_2 &gt; 1 c2>1,都可以找到一个大于或等于 a ( c 2 1 / b − 1 ) \frac{a}{({c_2}^{1/b}-1)} (c21/b1)a n 0 n_0 n0,使得对所有 n ≥ n 0 n ≥ n_0 nn0,有 ( n + a ) b ≤ c 2 n b (n+a)^b ≤ c_2n^b (n+a)bc2nb都成立。
  
   综上所述, ( n + a ) b = Θ ( n b ) (n+a)^b = Θ(n^b) (n+a)b=Θ(nb)是成立的。
  
3.1-3 解释为什么 “ “ 算法 A A A的运行时间至少是 O ( n 2 ) ” O(n^2)” O(n2)这一表述是无意义的。
  

3.1-4 2 n + 1 = O ( 2 n ) 2^{n+1} = {\rm O}(2^n) 2n+1=O(2n)成立吗? 2 2 n = O ( 2 n ) 2^{2n} = {\rm O}(2^n) 22n=O(2n)成立吗?
  
   取任意 c ≥ 2 c ≥ 2 c2,对任意 n &gt; 0 n &gt; 0 n>0,都有 2 n + 1 = 2 ∙ 2 n ≤ c ∙ 2 n 2^{n+1} = 2∙2^n ≤ c∙2^n 2n+1=22nc2n。故 2 n + 1 = O ( 2 n ) 2^{n+1} = {\rm O}(2^n) 2n+1=O(2n)成立。
   而 2 2 n = ( 2 n ) 2 = 2 n ∙ 2 n 2^{2n} = (2^n)^2 = 2^n∙2^n 22n=(2n)2=2n2n,无论取多大的正常量 c c c,当 n n n足够大时, 2 n ∙ 2 n 2^n∙2^n 2n2n都会超过 c ∙ 2 n c∙2^n c2n。因此, 2 2 n ≤ c ∙ 2 n 2^{2n} ≤ c∙2^n 22nc2n并不是渐近成立的,故 2 2 n = O ( 2 n ) 2^{2n} = O(2^n) 22n=O(2n)不成立。
  
3.1-5 证明定理3.1。
  

3.1-6 证明:一个算法的运行时间为 Θ ( g ( n ) ) Θ(g(n)) Θ(g(n))当且仅当其最坏情况运行时间为 O ( g ( n ) ) {\rm O}(g(n)) O(g(n)),且其最好情况运行时间为 Ω ( g ( n ) ) Ω(g(n)) Ω(g(n))
  

3.1-7 证明: o ( g ( n ) ) ∩ ω ( g ( n ) ) {\rm o}(g(n)) ∩ ω(g(n)) o(g(n))ω(g(n))为空集。
  
   采用反证法。假如存在这样的函数 f ( n ) f(n) f(n),满足 f ( n ) ∈ o ( g ( n ) ) ∩ ω ( g ( n ) ) f(n) ∈ {\rm o}(g(n)) ∩ ω(g(n)) f(n)o(g(n))ω(g(n))
   f ( n ) ∈ o ( g ( n ) ) f(n) ∈ {\rm o}(g(n)) f(n)o(g(n))说明对任意正常量 c &gt; 0 c &gt; 0 c>0,存在常量 n 1 &gt; 0 n_1 &gt; 0 n1>0,使得对所有 n ≥ n 1 n ≥ n_1 nn1,有 f ( n ) &lt; c g ( n ) f(n) &lt; cg(n) f(n)<cg(n)
   而 f ( n ) ∈ ω ( g ( n ) ) f(n) ∈ ω(g(n)) f(n)ω(g(n))说明对任意正常量 c &gt; 0 c &gt; 0 c>0,存在常量 n 2 &gt; 0 n_2 &gt; 0 n2>0,使得对所有 n ≥ n 2 n ≥ n_2 nn2,有 f ( n ) &gt; c g ( n ) f(n) &gt; cg(n) f(n)>cg(n)
   当 n ≥ m a x { n 1 , n 2 } n ≥ {\rm max}\{n_1, n_2\} nmax{n1,n2}时,既有 f ( n ) &lt; c g ( n ) f(n) &lt; cg(n) f(n)<cg(n),又有 f ( n ) &gt; c g ( n ) f(n) &gt; cg(n) f(n)>cg(n),这是矛盾的。因此不存在这样的函数 f ( n ) f(n) f(n),满足 f ( n ) ∈ o ( g ( n ) ) ∩ ω ( g ( n ) ) f(n) ∈ {\rm o}(g(n)) ∩ ω(g(n)) f(n)o(g(n))ω(g(n))。故 o ( g ( n ) ) ∩ ω ( g ( n ) ) {\rm o}(g(n)) ∩ ω(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 ) ) {\rm 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 ) } {\rm O}(g(n, m)) = \{ f(n, m):存在正常量c、n_0和m_0,使得对所有n ≥ n_0或m ≥ m_0,有0 ≤ f(n, m) ≤ cg(n, m) \} O(g(n,m))={f(n,m)cn0m0使nn0mm00f(n,m)cg(n,m)}
   对 Ω ( g ( n , m ) ) Ω(g(n, m)) Ω(g(n,m)) Θ ( g ( n , m ) ) Θ(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 ) } 。 Ω(g(n, m)) = \{ f(n, m):存在正常量c、n_0和m_0,使得对所有n ≥ n_0或m ≥ m_0,有0 ≤ cg(n, m) ≤ 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 ) } 。 Θ(g(n, m)) = \{ f(n, m):存在正常量c_1、c_2、n_0和m_0,使得对所有n ≥ n_0或m ≥ m_0,有0 ≤ c_1g(n, m) ≤ f(n, m) ≤ c_2g(n, m) \}。 Θ(g(n,m))={f(n,m)c1c2n0m0使nn0mm00c1g(n,m)f(n,m)c2g(n,m)}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值