比较Big O表示法

时间:2012-08-13 19:11:13

标签: algorithm big-o asymptotic-complexity

在n元素数组排序处理中采用;
  在X算法中:10 -8 n 2 sec,
  在Y algoritm 10 -6 n log 2 n sec,
  在Z algoritm 10 -5 sec。

我的问题是如何比较它们。例如,根据x,y的工作速度更快,我应该选择哪些元素?

2 个答案:

答案 0 :(得分:7)

比较Big-Oh表示法时,忽略所有常量:

N ^ 2的增长率高于N * log(N),其增长速度仍快于O(1)[常数]。

N的力量决定了增长率。

示例:

O(n^3 + 2n + 10) > O(200n^2 + 1000n + 5000)

忽略常量(正如你应该对纯粹的大哦比较),这会减少到:

O(n^3 + n) > O(n^2 + n)

进一步减少忽略低阶条款产生:

O(n^3) > O(n^2)

因为N 3 > 2的力量。

Big-Oh遵循这样的层次结构:

O(1) < O(log[n]) < O(n) < O(n*log[n]) < O(n^x) < O(x^n) < O(n!)

(其中x是大于1的任何数量,即使是最小的数量。)

你可以通过一些我不会在这里发布的规则来比较任何其他表达式,但是应该在维基百科中查找。我列出O(n*log[n]),因为它在排序算法中很常见;有关具有不同基数或不同权力的对数的详细信息,请查看参考源(我是否提及维基百科?)

给wiki文章一个镜头:http://en.wikipedia.org/wiki/Big_O_notation

答案 1 :(得分:0)

我提出了这个不同的解决方案,因为还没有接受的答案。

如果你想看一个算法比另一个算法表现得更好的n的值,你应该将algorthim时间设置为彼此相等并求解n

例如:

X = Z  
10^-8 n^2 = 10^-5  
n^2 = 10^3  
n = sqrt(10^3)
let c = sqrt(10^3)

因此,在比较XZ时,如果X小于n则选择c,如果Z则选择n }大于c。这可以在另外两对之间重复。