当我们为50n logn计算Big-Oh时它是O(n log n)?我们可以把O(n ^ 5)当作Big-Oh吗?

时间:2016-04-14 11:06:29

标签: c algorithm data-structures big-o

我最近遇到了一些渐近符号,当这个问题出现时是50 n logn并且通过流行的规则得到Big-OH​​表示法只是简单地删除常量和低阶项。但是50n logn也是N ^ 5的BIG-OH。 那么为什么Big-oh符号更好地考虑O(nlogn)而不是O(n ^ 5)。 Image showing 2 graphs

当在wolfram中将输入大小更改为0到50时,结果图就在这里 enter image description here

2 个答案:

答案 0 :(得分:8)

当你说50.n.log(n) = O(n^5)时,你是完全正确的。这在数学上没有问题。我们可以找到一个常数C = 1,以便对于高于某个值n的所有10,我们有

|50.n.log(n)| < C.|n^5|

请参阅维基百科了解formal definition

毫无疑问。

如果我们更愿意说50.n.log(n) = O(n.log(n))是因为我们经常想知道什么是最慢的增长函数,它决定了算法的复杂性。这通常用于比较算法的复杂性。

答案 1 :(得分:4)

50n log n不是字面O(n log n),也不是O(n^5)

50n log n是一个功能。

O(n log n)O(n log n)都是函数类,因此50n log n不能&#34;是&#34;任

50n log n两个类的成员。根据定义,O(g(n))包含所有函数f(n),因此对于某些常量∀n > N: f(n) < Mg(n)M N。这是(令人困惑地)写成f(n) = O(g(n))。 Big O表示法描述函数增长的上限

Big-O系列符号中的两个类似函数类别是Θ(n log n)Θ(n^5)(即大写希腊语字母Theta)。这些类小于相应的O类。 50n log n属于第一个,但不属于第二个。 Big Theta表示法描述了紧密的双边界f(n) = Θ(g(n))表示f(n)增长不快,不慢于g(n)(达到某个常数因子)。< / p>