理解大O符号

时间:2013-01-09 17:40:03

标签: algorithm big-o

关于算法的一些标准书籍产生了这个:

  对于所有 n ,

0≤f( n )≤c⋅g( n )。 名词的<子> 0

在定义big-O时,任何人都可以向我解释这意味着什么,使用一个强大的例子可以帮助我更准确地想象和理解big-O?

2 个答案:

答案 0 :(得分:2)

假设您有一个函数f(n),并且您正在尝试对其进行分类 - 它是否是其他函数g(n)的一大部分。

如果存在两个常数C,N,那么定义基本上说f(n)O(g(n))

f(n) <= c * g(n) for each n > N

现在,让我们理解这意味着什么。

n>N部分开始 - 这意味着,我们不会&#34;关心&#34;对于n的低值,我们只关心高值,如果某些(最终数量)低值不符合标准 - 我们可以通过选择大于它们的N来默默忽略它们。 / p>

查看以下示例:

enter image description here

虽然我们可以看到,对于n:n^2 < 10nlog(n)的低值,第二个很快就会赶上,在N=10之后我们得到n>10所有10nlog(n) < n^2声明10nlog(n)正确,因此O(n^2)位于c。 常量5*n意味着我们也可以通过常数因子容忍某个倍数,我们仍然可以接受它作为所需的行为(例如,显示O(n)N非常有用,因为没有它我们永远找不到n > N这样,对于每个5n < nc,但是使用常量5n < 6n,我们可以使用c = 6并显示5n并获得O(n)位于{{1}}。

答案 1 :(得分:0)

这个问题是一个数学问题,而不是一个算法问题。

您可以在此处找到定义和一个好例子:https://math.stackexchange.com/questions/259063/big-o-interpretation

正如@Thomas所指出的,维基百科也有一篇很好的文章:http://en.wikipedia.org/wiki/Big_O_notation

如果您需要更多详细信息,请尝试提出更具体的问题。