time-complexity - 为什么我们不能用比较排序算法比 O(n log n) 时间更快地对 N 个数字进行排序?

标签 time-complexity heap heapsort binary-heap binomial-heap

我正在研究二进制、二项式和斐波那契堆排序,我发现排序需要 O(n log n) 时间。如果有人能给我一个理由来解释为什么会这样,那就太好了。

最佳答案

n 个元素的列表具有 n! 个排列。这些排列之一是正确排序的排列。两个元素之间的单次比较仅传达 1 位信息,因此不可能比将搜索空间减半更好。因此,区分正确排序的排列与所有其他排列所需的比较次数的下限是 log2(n!) ∈ O(n log n)。

请注意,log2(n!) 实际上只是一个下限 - 它并不意味着实际上可以用精确的 n 数字进行排序上限(log2(n!)) 比较。事实上,有些排列需要您进行更多比较。但如果我们只对渐近行为感兴趣,这并不重要。

所以你会看到,如果我们不限制自己使用基于比较的排序算法,下限就不成立。 (参见例如桶排序或基数排序。)

关于time-complexity - 为什么我们不能用比较排序算法比 O(n log n) 时间更快地对 N 个数字进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65054442/

相关文章:

c++ - 程序员对优先队列实现的默认选择是什么?

algorithm - 找到 m 个最大的数字

algorithm - Heapsort 的这种优化有多值得?

c# - 计算堆排序对数组进行排序所需的步骤数

c++ - 如何实现最小堆排序以找到第 k 个最小元素?

algorithm - 这个算法的时间复杂度是多少

algorithm - 找出出现次数为偶数的数字

recursion - 该函数的大 O 表示法

algorithm - 扩展欧几里德算法的位复杂度是多少?

java - 二维平面中的 K 最近邻