Algorithm O(n logn)算法是否总是优于所有O(n^2)算法?
当试图正确理解Big-O时,我想知道Algorithm O(n logn)算法是否总是优于所有O(n^2)算法?,algorithm,time-complexity,big-o,Algorithm,Time Complexity,Big O,当试图正确理解Big-O时,我想知道O(n logn)算法是否总是优于allO(n^2)算法 是否有任何特殊情况下O(n^2)会更好 我已经读过多次,例如在排序中,当数据几乎被排序时,像气泡排序这样的O(n^2)算法可以特别快,因此它会比O(n log n)算法(例如合并排序)快吗?在这种情况下,O(n log n)渐进地优于O(n2) 大O,大θ,大ω,所有这些都度量函数的渐近行为,也就是说,当它们的参数趋于某个极限时函数的行为 O(n logn)函数的增长速度比O(n2)函数慢,这就是Big
O(n logn)
算法是否总是优于allO(n^2)
算法
是否有任何特殊情况下O(n^2)
会更好
我已经读过多次,例如在排序中,当数据几乎被排序时,像气泡排序这样的O(n^2)
算法可以特别快,因此它会比O(n log n)
算法(例如合并排序)快吗?在这种情况下,O(n log n)渐进地优于O(n2)
大O,大θ,大ω,所有这些都度量函数的渐近行为,也就是说,当它们的参数趋于某个极限时函数的行为
O(n logn)函数的增长速度比O(n2)函数慢,这就是Big-O表示法的本质。然而,这并不意味着O(n logn)总是更快。这仅仅意味着在某个时刻,O(n logn)函数对于n的不断增加的值来说总是更便宜
在该图中,f(n)=O(g(n))。注意,存在一个范围,其中f(n)实际上比g(n)更昂贵,即使它是由g(n)渐近有界的。然而,当谈到极限或渐近性时,f(n)“从长远来看”优于g(n),O(n log n)渐近性优于O(n2)
大O,大θ,大ω,所有这些都度量函数的渐近行为,也就是说,当它们的参数趋于某个极限时函数的行为
O(n logn)函数的增长速度比O(n2)函数慢,这就是Big-O表示法的本质。然而,这并不意味着O(n logn)总是更快。这仅仅意味着在某个时刻,O(n logn)函数对于n的不断增加的值来说总是更便宜
在该图中,f(n)=O(g(n))。注意,存在一个范围,其中f(n)实际上比g(n)更昂贵,即使它是由g(n)渐近有界的。然而,当谈到极限或渐近性时,f(n)“从长远来看”优于g(n)。除了@cadaniluk的答案: 如果将算法的输入限制为非常特殊的类型,这也会影响运行时间。例如,如果仅对已排序的列表运行排序算法,则BubbleSort将以线性时间运行,但MergeSort仍需要O(n log n)。 还有一些算法的最坏情况复杂度很差,但平均情况复杂度很好。这意味着存在错误的输入实例,导致算法运行缓慢,但总的来说,不太可能出现这种情况
也不要忘记,大O符号隐藏了低阶的常数和加法函数。因此,一个最坏情况复杂度为O(n logn)的算法实际上可能有2^10000*n*logn的复杂度,而你的O(n^2)算法实际上可以以1/2^1000 n^2的速度运行。因此,对于n<2^10000,您确实希望使用“较慢”算法。除了@cadaniluk的答案之外: 如果将算法的输入限制为非常特殊的类型,这也会影响运行时间。例如,如果仅对已排序的列表运行排序算法,则BubbleSort将以线性时间运行,但MergeSort仍需要O(n log n)。 还有一些算法的最坏情况复杂度很差,但平均情况复杂度很好。这意味着存在错误的输入实例,导致算法运行缓慢,但总的来说,不太可能出现这种情况 也不要忘记,大O符号隐藏了低阶的常数和加法函数。因此,一个最坏情况复杂度为O(n logn)的算法实际上可能有2^10000*n*logn的复杂度,而你的O(n^2)算法实际上可以以1/2^1000 n^2的速度运行。因此,对于n<2^10000,您确实希望使用“较慢”的算法。不,
O(n logn)
算法并不总是比O(n^2)
算法好。
Big-O表示法描述了算法的渐近行为的上界,即趋于无穷大的n
在这个定义中,你必须考虑一些方面:
O(n)
中运行,而合并排序和快速排序总是至少需要O)(n日志n)
)1000000 x
的算法在类O(n)
中的性能比复杂度0.5 x^2
的算法差(类O(n^2)
)对于小于2000000的输入。基本上,大O表示法告诉您,对于足够大的输入n,O(n)
算法的性能将优于O(n^2)
,但如果您使用小输入,您可能仍然更喜欢后一种解决方案O(n logn)
算法并不总是优于O(n^2)
算法。
Big-O表示法描述了算法的渐近行为的上界,即趋于无穷大的n
在这个定义中,你必须考虑一些方面:
O(n)
中运行,而合并排序和快速排序总是至少需要O)(n日志n)
)