渐进分析
渐进记号
\(\Theta\)记号
- 核心含义:渐近紧确界
- 定义:
\[\Theta(g(n))=\{f(n):\exists c_1,c_2,n_0>0,\text{使得 }\forall n\geqslant n_0,0\leqslant c_1g(n)\leqslant f(n)\leqslant c_2g(n)\}
\]
- 若存在正常量\(c_1\) 和\(c_2\),使得对于足够大的 \(n\),函数 \(f(n)\)能夹入\(c_1g(n)\)与 \(c_2g(n)\)之间,则 \(f(n)\) 属于集合 \(\Theta(g(n))\),因为 \(\Theta(g(n))\) 是一个集合,所以可以记\(f(n)\in \Theta(g(n))\) 。作为替代,我们通常记\(f(n)=\Theta(g(n))\)以表达相同的概念。
- 换句话说,对所有 \(n\geqslant n_0\) ,函数 \(f(n)\) 在一个常量因子内等于 \(g(n)\) 。我们称 \(g(n)\) 是 \(f(n)\) 的一个渐近紧确界(asymptotically tight bound)。
- 直觉上,一个渐近正函数的低阶项在确定渐近确界时可以被忽略,因为对足够大的 \(n\),它们是无足轻重的。
- 最高阶项系数同样可以被忽略,因为它仅仅根据一个等于该系数的常量因子来改变\(c_1,c_2\)
\(O\)记号
- 核心含义:渐近上界
- 定义:
\[O(g(n))=\{ f(n):\exists c,n_0>0,\text{使得 }\forall n\geqslant n_0,0\leqslant f(n)\leqslant cg(n)\}
\]
- 我们记 \(f(n)=O(g(n))\) 以指出函数 \(f(n)\) 是集合 \(O(g(n))\) 的成员。注意, \(f(n)=\Theta(g(n))\) 蕴涵着\(f(n)=O(g(n))\),因为 \(\Theta\)记号是一个比 \(O\)记号要强的概念。\(\Theta(g(n))\subseteq O(g(n))\)
- \(O\) 记号描述上界,我们可以用它来描述算法的最坏情况运行时间。
\(\Omega\)记号
- 核心含义:渐进下界
- 定义:
\[\Omega(g(n))=\{ f(n): \exists c,n_0>0,使得\forall n\geqslant n_0, 0\leqslant cg(n)\leqslant f(n)\}
\]
- 渐进紧界的判定定理:
- 对任意两个函数 \(f(n)\) 和 \(g(n)\) , 我们有 \(f(n)=\Theta(g(n))\), 当且仅当\(f(n)=O(g(n))\) 且 \(f(n)=\Omega(g(n))\)。
\(o\)记号
- 核心概念:渐进严格上界,渐进小于
- 我们使用 \(o\) 记号来表示一个非渐近紧确的上界。
- 定义:
\[o(g(n))=\{ f(n):\exists c,n_0>0,\text{使得 }\forall n\geqslant n_0,\text{有 }0\leqslant f(n)<cg(n)\}
\]
- 直观上,在 \(o\) 记号中,当 \(n\) 趋于无穷时,函数 \(f(n)\) 相对于 \(g(n)\) 来说变得微不足道了。用数学表达即为:
\[\lim_{n\to\infty}\frac{f(n)}{g(n)}=0
\]
\(\omega\)记号
- 核心概念:渐进严格下界,渐进大于
- 我们使用记号\(\omega\)来表示一个非渐近紧确的下界。
- 定义:
\[\omega(g(n))=\{ f(n):\exists c,n_0>0,\text{使得}\forall n\geqslant n_0,\text{有 }0\leqslant cg(n)<f(n)\}
\]
\[f(n)\in\omega(g(n))\text{ 当且仅当 }g(n)\in o(f(n))
\]
类比不等号
\[\begin{aligned}&f(n)=O(g(n))\text{ 类似于 }a\leqslant b\\&f(n)=\Omega(g(n))\text{ 类似于 }a\geqslant b\\&f(n)=\Theta(g(n)\text{ 类似于 }a=b\\&f(n)=o(g(n))\text{ 类似于 }a<b\\&f(n)=\omega(g(n))\text{ 类似于 }a>b\end{aligned}
\]
斯特林近似公式
\[n!=\sqrt{2\pi n}\Big(\frac n{\mathrm{e}}\Big)^n\Big(1+\Theta\Big(\frac1n\Big)\Big)
\]
- 给出了阶乘的一个紧确界。
多重对数函数
- 定义:
\[\lg^*n=\min\{i\geqslant0:\lg^{(i)}n\leqslant1\}
\]
其中\(f^{(i)}(x)\)表示多重函数应用\(i\)次,如:\(f^{(2)}(x) = f(f(x))\)
- 多重对数是一个增长非常慢的函数
\[\begin{aligned}&\mathrm{lg}^{*}2=1\\&\mathrm{lg}^{*}4=2\\&\mathrm{lg}^{*}16=3\\&\lg^{*}65536=4\\&\lg^{*}(2^{65536})=5\end{aligned}\]
渐进函数常见结论
\[O(1)<O(\log^* n)<O(\log n)<O(n)<O(n\log n)<O(n^2)<O(c^n)<O(n!)
\]
思考题(源于算法导论)
根据增长的阶来排序下面的函数,即求出满足\(g_1=\Omega(g_2)\),\(g_2=\Omega(g_3)\),\(\cdots\),\(g_{29}=Omega(g_{30})\)的函数的一种排列 \(g_1,\:g_2,\cdots,g_{30}\) 。把你的表划分成等价类,使得函数\(f(n)\) 和 \(g(n)\) 在相同类中当且仅当 \(f(n)=\Theta(g(n))\)。

- 简单的函数先排列
| 1 | \(2^{2^{n+1}}\) |
|---|---|
| 2 | \(2^{2^{n}}\) |
| 3 | \((n+1)!\) |
| 4 | \(n!\) |
| 5 | \(e^n\) |
| 6 | \(2^n\) |
| 7 | \((\frac{3}{2})^n\) |
| 8 | \(n^3\) |
| 9 | \(n^2\) |
| 10 | \(n \lg n\) |
| 11 | \(n\) |
| 12 | \(\ln n\) |
| 13 | \(\ln \ln n\) |
| 14 | \(\lg^* n\) |
| 15 | \(1\) |
- 化简:\(n^{\frac{1}{\lg n}} =2^{\lg n \cdot \frac{1}{\lg n}} = 2\),\(2^{\lg n} = n\),\(4^{\lg n} = 2^{\lg n^2} = n^2\),\(\sqrt{2}^{\lg n}=2^{\lg n^{\frac{1}{2}}} = \sqrt n\)
- 由斯特林公式,\(\lg(n!) = \Theta (n\lg n)\)
- 直观可以感受到,\(\sqrt{\lg n} < \lg n\) , \(\lg \lg n < \sqrt{\lg n}\),
- \(\lg n = o(n^{\frac{1}{4}})\),可以得出\((\lg n)^2 =o(n^{\frac{1}{2}})\)
- \(\lim_{n\rightarrow \infty} \frac{e^n}{n2^n}=\lim_{n\rightarrow \infty} \frac{(\frac{e}{2})^n}{n}=\infty\),\(e^n = \omega(n2^n)\)
- 由于\(\lg^* n\)增长十分缓慢,所以当\(n\rightarrow \infty\)时,\(\lg^*(n) = \Theta(\lg^* \lg n)\)
- 考虑\(\lg((\lg n) !) =\Theta(\lg n \cdot \lg \lg n)\),\(\lg (n^a) = a\lg n\),\(\lg (a^n) = n\lg a\),不难得出\(\lg (n^a) < \lg((\lg n) !) < \lg (a^n)\),所以,\(n^a < (\lg n)! < a^n\)
- 考虑\(\lg (n^{\lg \lg n}) = \lg \lg n \cdot \lg n\)
- 考虑\(\lg (2^{\lg^* n}) = \lg^* n \lg 2 = \Theta(\lg^* n)\),\(\lg^* n >\lg(\lg^* n)\),\(\lg^* n < \lg(\ln \ln n)\),所以\(\lg^* n < 2^{\lg^* n} <\ln \ln n\)
- 考虑\(\lg ((\lg n)^{\lg n}) = \lg n \lg \lg n\),好像跟\(n^{\lg \lg n}\)差不多,化成指数形式:\((\lg n)^{\lg n} = (2^{\lg \lg n})^{\lg n} =2^{\lg n\lg \lg n}\),\(n^{\lg \lg n} = (2^{\lg n})^{\lg \lg n}\),二者等价。由于\(n^n > n!\),\((\lg n)^{\lg n} > (\lg n)!\)
- 考虑\(\lg(2^{\sqrt{2\lg n}}) = \sqrt{2\lg n}\lg 2 = \Theta(\sqrt{\lg n})\),\(\lg \sqrt{n} = \frac{1}{2}\lg n\),\(\sqrt{\lg n} > 2\lg \lg n\),\(\sqrt{\lg n} < \frac{1}{2}\lg n\),所以\(\lg^2 n < 2^{\sqrt{2\lg n}} < \sqrt{n}\)
| 1 | \(2^{2^{n+1}}\) | |
|---|---|---|
| 2 | \(2^{2^{n}}\) | |
| 3 | \((n+1)!\) | |
| 4 | \(n!\) | |
| 5 | \(e^n\) | |
| 6 | \(n2^n\) | |
| 7 | \(2^n\) | |
| 8 | \((\frac{3}{2})^n\) | |
| 9 | \((\lg n)^{\lg n}\) | \(n^{\lg \lg n}\) |
| 10 | \((\lg n)!\) | |
| 11 | \(n^3\) | |
| 12 | \(n^2\) | \(4^{\lg n}\) |
| 13 | \(n \lg n\) | \(\lg (n!)\) |
| 14 | \(n\) | \(2^{\lg n}\) |
| 15 | \(\sqrt{2}^{\lg n}\) | |
| 16 | \(2^{\sqrt{2\lg n}}\) | |
| 17 | \(\lg^2 n\) | |
| 18 | \(\ln n\) | |
| 19 | \(\sqrt{\lg n}\) | |
| 20 | \(\ln \ln n\) | |
| 21 | \(2^{\lg^* n}\) | |
| 22 | \(\lg^* n\) | \(\lg^* (\lg n)\) |
| 23 | \(\lg ({\lg^* n})\) | |
| 24 | \(n^{\frac{1}{\lg n}}\) | |
| 25 | \(1\) |

浙公网安备 33010602011771号