我有一个数组A
中表示的最大堆,我有以下问题:
Is it possible to build a sorted list , based on the maximum
heap - A - in O(n*log(log(n))) ?
我的回答:不,我们不能!我们始终可以在A
上运行并在O(n*log(n))
中执行MergeSort
或O(n*log(n))
中的QuickSort(最差情况O(n^2)
)。
我想也许可以根据A
构建实际的堆,这需要O(n)
,然后从那里提取O(n*log(n))
中的所有元素,但我在这里没有获得任何东西。
目前我看不到O(n*log(log(n)))
的任何选项,任何想法?
答案 0 :(得分:6)
我认为这是不可能的: 有一种算法可以在o(n)中构建一个最大堆(看这里Is there a O(n) algorithm to build a max-heap?) 因此,如果您可以在o(n)中创建堆,然后在o(n log(log(n))中对其进行排序, 你可以得到一个在o(n log(log(n))中工作的排序算法,如果你没有关于输入的初始信息,这是不可能的。
答案 1 :(得分:2)
如果你有一个数组形式的最大堆,那么在该数组上使用类似插入排序的东西应该会产生非常好的结果。数组形式的最大堆几乎排序(降序),当数组接近排序时,插入的最佳情况是O(n)。它仍然会有一个O(n ^ 2)最坏的情况,但我认为你没有遇到过最糟糕的情况。