关于算法的一些标准书籍产生了这个:
对于所有 n ,0≤f( n )≤c⋅g( n )。 名词的<子> 0 子>
在定义big-O时,任何人都可以向我解释这意味着什么,使用一个强大的例子可以帮助我更准确地想象和理解big-O?
答案 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>
查看以下示例:
虽然我们可以看到,对于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 < n
:c
,但是使用常量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
如果您需要更多详细信息,请尝试提出更具体的问题。