Big O表示法:O(n ^ 2)和O(n.log(n))之间的差异?

时间:2009-12-03 21:44:58

标签: big-o

O(n^2)O(n.log(n))之间的区别是什么?

6 个答案:

答案 0 :(得分:15)

n ^ 2复杂性越来越快。

答案 1 :(得分:2)

Big O计算相对于数据集大小(n)的运行时间上限。

O(n*log(n))并不总是比O(n^2算法快,但在考虑最坏情况时,可能是。复制工作集(最差情况)时,O(n^2) - 算法需要大约4倍的时间,对于O(n*log(n)) - 算法则更少。数据集越大,使用O(n*log(n))算法通常会越快。

编辑:感谢'伤害',我会在第一个答案中更正错误的陈述:我告诉我,在考虑最坏情况时,O(n^2)总是慢于{{ 1}},这是错误的,因为两者都是,除了常数因子

示例:假设我们遇到了最糟糕的情况,我们的数据集大小为100。

  • O(n*log(n)) - > 100 * 100 = 10000
  • O(n^2) - > 100 * 2 = 200(使用log_10)

问题是两者都可以乘以一个常数因子,比如我们将O(n*log(n))乘以后者。结果将是:

  • c - > 100 * 100 = 10000
  • O(n^2) - > 100 * 2 * c = 200 * c(使用log_10)

因此,对于O(n*log(n)),我们得到c > 50

我必须更新我的陈述:对于每个问题,在考虑最坏的情况时,对于任意大的数据集,O(n*log(n)) > O(n^2), for n=100算法将比O(n*log(n))算法更快

原因是:O(n^2)的选择是任意的,但常数。如果您将数据集增加到足够大,它将主导c的每个常量选项的效果,并且当讨论两个算法时,两者的c都是常量!

答案 2 :(得分:1)

您需要更具体地了解您的要求,但在这种情况下O(n log(n))更快

答案 3 :(得分:1)

n log(n)增长明显变慢

答案 4 :(得分:1)

在O(nlog(n))时间内运行的算法通常比在O(n ^ 2)中运行的算法更快。

Big-O定义了性能的上限。随着数据集的大小增加(n)执行任务所花费的时间长度。您可能对iTunes U algorithms course from MIT感兴趣。

答案 5 :(得分:0)

“Big Oh”符号给出了算法运行时间增长的估计上限。如果一个算法应该是O(n ^ 2),那么它会以一种天真的方式表示,对于n = 1,它需要一个最大值。时间1个单位,对于n = 2,需要最多。时间4个单位等。类似地,对于O(n log(n)),它表示生长将使得它服从O(n log(n))的上限。 (如果我在这里不仅仅是天真,请在评论中纠正我)。

我希望有所帮助。