嘘~ 正在从服务器偷取页面 . . .

渐进记号总结 & 《算法导论》 3.1


渐进记号总结 & 《算法导论》 3.1

用来描述算法渐进运行时间的记号根据定义域为自然数集 \(\mathbb{N}\) 的函数来定义。

这样的记号对描述最坏情况运行时间的函数 \(T(n)\) 是方便的。

紧渐进界记号 \(\Theta\)

断句:紧 渐进 界 记号

upd. 还是叫 紧确渐进界记号 \(\Theta\) 比较好.. \[ \Theta(g(n)) = \{f(n) \mid \texttt{存在正常量} \,c_1,c_2\,\texttt{和}\,n_0\,\texttt{使得对所有}\,n\ge n_0\,\texttt{有}\,c_1g(n) \le f(n) \le c_2g(n)\} \] 例子 \(f(n) = 3n^2-n+5 = \Theta(n^2)\)

定理1:对于任意两个函数 \(f(n)\)\(g(n)\) ,我们有 \(f(n)=\Theta(g(n))\) ,当且仅当 \(f(n)=O(g(n)) \land f(n) = \Omega(g(n))\)

或者等价的表示为: \(\Theta(f(n)) = O(n) \cap \Omega(n)\)

证明:显然。\(O,\Omega\) 记号的定义详见下文。


渐进上界记号 \(O\)

一般也写做 \(\mathcal{O}\)\[ O(g(n)) = \{f(n)\mid\texttt{存在正常量}\, c \,\texttt{和} \,n_0 \,\texttt{使得对所有} \, n \ge n_0 \,\texttt{有}\,0\le f(n) \le cg(n)\} \]

例子:\(f(n) = 2n^2 + 3n + 1 =O(n^2),~f(n) = 2n = O(n^2)\)


渐进下界记号 \(\Omega\)

\[ \Omega(g(n)) = \{f(n)\mid\texttt{存在正常量}\, c \,\texttt{和} \,n_0 \,\texttt{使得对所有} \, n \ge n_0 \,\texttt{有}\,0 \le cg(n)\le f(n)\} \]

例子:\(f(n) = 2n+3 = \Omega(n),~f(n) = n^3 + 1 = \Omega(n)\)


非渐进紧确上界记号 \(o\)

断句:非渐进紧确 上界 记号

也叫 非紧上界记号 \(o\)

注意区分大小写。 \[ o(g(n)) =\{f(n) \mid \texttt{对任意正常量} \,c\,,\texttt{存在正常量} \,n_0\,\texttt{使得对所有}\,n\ge n_0 \,\texttt{有}\, 0 \le f(n) < cg(n)\} \] 这等价于 \[ \lim\limits_{n \to +\infty} \dfrac{f(n)}{g(n)} = 0 \]

例子: \(f(n) = n \log_2 n = o(n^2)\)

但是 \(f(n) = n^2 -n \ne o(n^2)\) 。因为 \(n^2 - n = O(n^2)\) 是渐进紧确的。


非渐进紧确下界记号 \(\omega\)

断句:非渐进紧确 下界 记号

也叫 非紧下界记号 \(\omega\)

注意这是 omega ,不是 w \[ \omega(g(n)) =\{f(n) \mid \texttt{对任意正常量} \,c\,,\texttt{存在正常量} \,n_0\,\texttt{使得对所有}\,n\ge n_0 \,\texttt{有}\, 0 \le cg(n) < f(n)\} \] 这等价于 \[ \lim\limits_{n \to +\infty} \dfrac{f(n)}{g(n)} = +\infty \] 例子:\(f(n) = n^{\frac{5}{4}} = \omega(n)\)

但是 \(f(n) = n^4 +1 \ne \omega (n^4)\) ,因为 \(n^4 = \Omega (n^4)\) 是渐进紧确的。


渐进记号的性质与比较

记号 含义 通俗理解
\(\Theta\) 紧渐进界 \(=\)
\(O\) 渐进上界 \(\le\)
\(o\) 非紧上界 \(<\)
\(\Omega\) 渐进下界 \(\ge\)
\(\omega\) 非紧下界 \(>\)

传递性

\[ \begin{aligned} f(n) = \Theta(g(n)) &\land g(n) = \Theta(h(n)) &\Rightarrow&\quad f(n) = \Theta(h(n)) \\f(n) = O(g(n)) &\land g(n) = O(h(n)) &\Rightarrow&\quad f(n) = O(h(n)) \\f(n) = \Omega(g(n)) &\land g(n) = \Omega(h(n)) &\Rightarrow&\quad f(n) = \Omega(h(n)) \\f(n) = o(g(n)) &\land g(n) = o(h(n)) &\Rightarrow&\quad f(n) = o(h(n)) \\f(n) = \omega(g(n)) &\land g(n) = \omega(h(n)) &\Rightarrow&\quad f(n) = \omega(h(n)) \end{aligned} \]

自反性

\[ \begin{aligned} f(n) &= \Theta(f(n)) \\ f(n) &= O(f(n)) \\ f(n) &= \Omega(f(n)) \\ f(n) &= o(f(n)) \\ f(n) &= \omega(f(n)) \end{aligned} \]

对称性

\[ f(n) = \Theta(g(n)) \Leftrightarrow g(n) = \Theta(f(n)) \]

转置对称性

\[ \begin{aligned} f(n) = O(g(n)) &\Leftrightarrow g(n) = \Omega(f(n)) \\ f(n) = o(g(n)) & \Leftrightarrow g(n) = \omega(f(n)) \end{aligned} \]

  • \(f(n) =o(g(n))\) ,则称 \(f(n)\) 渐进小于 \(g(n)\)

  • \(f(n) = \omega(g(n))\) ,则称 \(f(n)\) 渐进大于 \(g(n)\)

无三分性

指实数的三分性不适用于渐进记号。

实数的三分性:对于任意两个实数 \(a,b\) ,下列三种情况必有一种必须成立。 \[ a<b,~a=b,~a>b \] 虽然任意两个实数可以进行比较,但是不是所有函数都可以渐进比较。

也就是说,对于两个函数 \(f(n)\)\(g(n)\)

也许 \(f(n)=O(g(n))\)\(f(n) = \Omega(g(n))\) 都不成立。

书上的例子: \[ f(n)=n,~g(n)=n^{1+\sin n} \] 因为 \(-1 \le \sin x \le 1\)

所以 \(g(n)\) 中的幂值在 \(0\)\(2\) 之间摆动,取介于两者之间的所有值。


参考文献

[1] https://blog.csdn.net/qq_44575910/article/details/119253189

[2] https://blog.csdn.net/so_geili/article/details/53353593


文章作者: q779
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 q779 !
评论
  目录