您的位置:首页 > 其它

渐近记号

2016-05-03 18:55 239 查看
定义 设 f\left(n\right)f(n) 是一个定义在 \mathbb{N}N(有时也可取 \mathbb{Z}_+Z​+​​ 等,允许有有限个自然数处没有定义)上的函数,定义集合

\mathcal{O}\left(f\right)=\left\{{g\left(n\right):\exists
N\in\mathbb{N},C\geq 0,\mathrm{\ s.t.\ }\forall n\geq N,\left|g\left(n\right)\right|\leq C\left|f\left(n\right)\right|}\right\}.O(f)={g(n):∃N∈N,C≥0, s.t. ∀n≥N,∣g(n)∣≤C∣f(n)∣}.

这个集合中的函数称为 “在 n\to\inftyn→∞ 时被 ff 控制的函数”。

回忆上一节介绍的三个算法,它们的时间复杂度分别是

\begin{array}{rcl}T_1\left(n\right)&=&n\
\leq\ n,\\T_2\left(n\right)&=&n+100\log n\ \leq\ 101n,\\T_3\left(n\right)&=&5n\ \leq\ 5n.\quad\left(n\geq 1\right)\end{array}​T​1​​(n)​T​2​​(n)​T​3​​(n)​​​=​=​=​​​n ≤ n,​n+100logn ≤ 101n,​5n ≤ 5n.(n≥1)​​

因此 T_1,T_2,T_3\in\mathcal{O}\left(n\right)T​1​​,T​2​​,T​3​​∈O(n),这便是三者的一个重要共性我们来看看

\mathcal{O}O 的几个简单性质:

一个最简单的事实是 f\in\mathcal{O}\left(f\right)f∈O(f);
若 f\in\mathcal{O}\left(g\right)f∈O(g),则 Cf\in\mathcal{O}\left(g\right)Cf∈O(g);
若 f,g\in\mathcal{O}\left(h\right)f,g∈O(h),则 f+g\in\mathcal{O}\left(h\right)f+g∈O(h);
若 f\in\mathcal{O}\left(g\right),
g\in\mathcal{O}\left(h\right)f∈O(g),g∈O(h),则 f\in\mathcal{O}\left(h\right)f∈O(h);
若 a\leq ba≤b,则 n^a\in\mathcal{O}\left(n^b\right)n​a​​∈O(n​b​​);
\mathcal{O}\left(1\right)\subsetneq\mathcal{O}\left(\log
n\right)\subsetneq\mathcal{O}\left(n\right)\subsetneq 2^{\mathcal{O}\left(n\right)}O(1)⊊O(logn)⊊O(n)⊊2​O(n)​​。

我们可以看到,\mathcal{O}O 这个记号忽略了系数和所谓的“低阶项”:

\begin{array}{rcl}2n+3\log n&\in&\mathcal{O}\left(n\right),\\n^2+2n&\in&\mathcal{O}\left(n^2\right),\\5n\log
n+2n+13\log n&\in&\mathcal{O}\left(n\log n\right),\\n^{1.5}&\in&\mathcal{O}\left(n^2\right).\end{array}​2n+3logn​n​2​​+2n​5nlogn+2n+13logn​n​1.5​​​​​∈​∈​∈​∈​​​O(n),​O(n​2​​),​O(nlogn),​O(n​2​​).​​

作为 \mathcal{O}O 记号的结尾,我们指出,在实际使用中常常用 f=\mathcal{O}\left(g\right)f=O(g) 表示 f\in\mathcal{O}\left(g\right)f∈O(g)。大家不应该把这个等号理解为 相等,而是应该理解为 和右边集合中某个元素相等。

下一页我们快速地介绍另外几个常用的符号。定义 下面定义

\OmegaΩ、\ThetaΘ 和 oo(小 oo 记号):

\begin{array}{rcl}f\in\Omega\left(g\right)&\Longleftrightarrow&g\in\mathcal{O}\left(f\right);\\f\in\Theta\left(g\right)&\Longleftrightarrow&f\in\mathcal{O}\left(g\right),g\in\mathcal{O}\left(f\right);\\f\in
o\left(g\right)&\Longleftrightarrow&\forall\varepsilon>0,\exists N,\mathrm{\ s.t.\ }\forall n\geq N, \left|f\left(n\right)\right|\leq \varepsilon\left|g\left(n\right)\right|.\end{array}​f∈Ω(g)​f∈Θ(g)​f∈o(g)​​​⟺​⟺​⟺​​​g∈O(f);​f∈O(g),g∈O(f);​∀ε>0,∃N, s.t. ∀n≥N,∣f(n)∣≤ε∣g(n)∣.​​

\OmegaΩ 就是和 \mathcal{O}O 相反的关系,把 \mathcal{O}O 理解为“控制”的话,那么 \OmegaΩ 就是“被控制”的意思。

\ThetaΘ 关系的意思是两个函数互相“控制”,也就是常说的“差一个常数(因子)”。

oo 是一个比 \mathcal{O}O 更“强”(更“严格”)的关系:通俗地说,它要求 ff 的增加速度小于 gg 增加的速度,而 \mathcal{O}O 只要求 ff 的增加速度不超过 gg 增加的速度。



我们指出这些记号统称“渐近记号”,这是因为这些记号关心的是且仅是函数在自变量趋于无穷时的性态(即“渐近性质”)。
最后,回顾上一节,我们证明了在特定条件下,一个算法的时间复杂度 TT 和空间复杂度 SS 之间有关系 TC\geq
STC≥S(其中 CC 是一个正常数),用现在的语言说就是 S=\mathcal{O}\left(T\right)S=O(T),或者说 SS 被 TT 控制。正因为这样,本课程更关心算法的时间复杂度而不是空间复杂度:一个算法如果有很低的时间复杂度意味着它有很低的空间复杂度。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: