从O(n * log(log(n)))中的最大堆构建排序列表?

时间:2012-06-22 11:56:16

标签: algorithm sorting heap

我有一个数组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)))的任何选项,任何想法?

2 个答案:

答案 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)最坏的情况,但我认为你没有遇到过最糟糕的情况。