O(n^2)
和O(n.log(n))
之间的区别是什么?
答案 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))的上限。 (如果我在这里不仅仅是天真,请在评论中纠正我)。
我希望有所帮助。