渐进分析

渐进记号

\(\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\)
posted @ 2025-10-24 00:16  NightRainLone  阅读(21)  评论(0)    收藏  举报