我如何编写大O符号

时间:2013-01-12 16:03:11

标签: complexity-theory big-o

我真的不知道如何以大O符号表达。我看到几个消息来源谈论这个,但这只会让我更加不确定。当我在big-O中写时,我应该忽略常量吗?

的示例:

1. 0.02N³
2. 4N*log(2^N)
3. 24Nlog(N)
4. N²
5. N*sqrt(N)

这就是我所说的“忽略常数”:

1. O(N³)
2. O( N*log(2^N) )
3. O( Nlog(N) )
4. O( N² )
5. O( N*sqrt(N) )

与其他示例相比,O( N*log(2^N) )O( N*sqrt(N) )的增长速度有多快?

我非常感谢帮助,所以提前感谢

2 个答案:

答案 0 :(得分:4)

Big O表示法是函数的渐近行为的特征。在f(x) = O(g(x))

时以数学方式lim (x->inf) (f(x)/g(x)) = const

让我们清楚一点。共有5种常用符号(Bachmann–Landau notations):

 ω (small omega)
 Ω (big omega)
 Θ (theta)
 Ο (big o)
 ο (small o)

它们像数学比较运算符一样工作:

 < (strictly less)
 <= (less or equals)
 = (equals)
 >= (greater or equals)
 > (strictly greater)

严格地说,大o只是一个上限,所以你不能仅仅基于big-o表示法来说明哪个函数增长得更快。

例如,快速排序具有最坏的情况复杂度= O(n 2 )但是也可以说快速排序具有最坏的情况复杂度= O(n 889功能)。 就像我们可以说x&lt; 899基于知识x&lt; 2。

由于限制行为,您可以忽略函数的常量和次序较少的求和(它们是#34;由最高阶加数占优势的#34;)。 例如,如果f(x) = 33*n³ + n² + n + 3544,说f(x) = O(n³)是正确的 (此外,说f(x) = Θ(n³)提供更多信息是正确的(Θ称为tight bound

答案 1 :(得分:0)

是的,你忽略了常量。如果你有一笔前额。 5n^2 + 2n你只使用最高指数(也没有常数)的最大参数 - &gt;在这里:O(n^2)你这些例子很好。

为了比较增长,我建议你使用wolframalpha或任何工具绘图,你会看到他们如何改变