之间的区别是什么 大-O 符号 O(n)小-O 符号 o(n)?

有帮助吗?

解决方案

f∈O(g)说,基本上

对于 至少一个 选择的一个常数 k >0,你可以找到一个常数 一个 这种不平等,0 <=f(x) <=k g(x)拥有的所有x>。

注意O(g)该组所有职能这一条件。

f∈o(g)说,基本上

对于 选择的一个常数 k >0,你可以找到一个常数 一个 这种不平等,0 <=f(x) < k g(x)拥有的所有x>。

再次注意o(g)是一套。

在大,它只是必要的,你找到一个特定的乘数 k 对其中的不平等拥有超过一些最小的 x.

在小,它必须有一个最低 x 在这之后的不平等拥有无论多么小你做 k, 只要它不是负面的,或者为零。

这些都描述了上限,虽然有些反直觉的,小-o更强的发言。有多大的差距之间的增长率f和g如果f∈o(g)如果f∈O(g)。

一个插画的差距是这样的:f∈O(f)是真实的,但f∈o(f)是错误的。因此,大-O可以读作"f∈O(g)意味着,f的渐进增长是无比快克",而"f∈o(g)意味着,f的渐进增长是严格比克的"。这就像 <=<.

更具体地说,如果价值g(x)是一个常数倍的价值f(x),然后f∈O(g)是真实的。这就是为什么你可以降常工作时与大O符号。

然而,对于f∈o(g)是真实的,那么克必须包括一个更高的 x在其公式,因此相对分离之间f(x)和g(x)实际上必须获得更大的作x得到更大。

用纯粹的数学的例子(而不是参照算法):

以下是真大-O,但不会是真的如果你用点-o:

  • x2∈O(x2)
  • x2∈O(x2+x)
  • x2∈O(200*x2)

以下是真小-o:

  • x2∈o(x3)
  • x2∈o(x!)
  • ln(x)∈o(x)

请注意,如果f∈o(g),这意味着f∈O(g)。例如x2∈o(x3)因此,这也是事实,x2∈O(x3),(再次想到的O <= 和o <)

其他提示

大-O-来点-o 是为了 <.大-O是一个包容性的上限,而小-o是一个严格的上限。

例如,功能 f(n) = 3n 为:

  • O(n²), o(n²), , O(n)
  • 不在 O(lg n), o(lg n), 或 o(n)

类似地,数 1 为:

  • ≤ 2, < 2, , ≤ 1
  • ≤ 0, < 0, 或 < 1

这里有一个表,显示出一般想法:

Big o table

(注:该表是一个良好指导,但其限制的定义应在条款 卓越的限制 而不是正常的限制。例如, 3 + (n mod 2) 振荡3和4之间的直到永远。这是在 O(1) 尽管没有一个正常的限制,因为它仍然有一个 lim sup: 4.)

我建议,如何记忆的大O符号转换为渐进的比较。比较容易记住的,但不太灵活,因为你不能说这样的nO(1) =P.

我发现,当我不能在概念上把握的东西,想着 为什么人会利用X 是有助于了解X(不要说你有没有试过,我只是设置的阶段。)

[东西,你知道]一个普通的方式进行分类的算法是通过运行时,并且通过援引大-哦复杂的算法,则可以获得一个很好的估计其中一个是"好"--无论具有"最小"的功能在O!即使在现实世界中,O(N)"更好"的比O(N2),禁止无聊的事情就像超大规模的常数等。[/东西,你知道]

让我们说有一些算法运行在O(N)。很不错,是吧?但我们说您(你的辉煌的人,你一)提出了一个算法运行在O(NloglogloglogN).耶!其快!但是你会感觉的愚蠢的书写,一遍又一遍的时候你正在写你的论文。所以你写一次,你可以说"在本文中,我已经证明,算法X,以前可计算的时间O(N),实际上可计算在o(n)。"

因此,每个人都知道,你的算法更快的---有多少还不清楚,但是它们知道它的速度更快。理论上。:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top