我真的不知道如何以大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) )
的增长速度有多快?
我非常感谢帮助,所以提前感谢
答案 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或任何工具绘图,你会看到他们如何改变