请告诉我这两个用于构建堆的伪代码是否总是返回SAME HEAP? 这是“经典”着名的BuildHeap代码:
BuildHeap(A) // A是未排序的数组
for(i = A.size/2 down to 1) do
MaxHeapify(A,i)
这是使用插入代码构建堆:
构建 - 最大值 - 堆-BY-插入(A)
heapsize[A] = 1
for i=2 to length[A]
Max-Heap-Insert(A,A[i])
谢谢!
答案 0 :(得分:0)
看起来好像是指从头开始构建堆的线性时间方法,并将其与迭代构建堆进行比较,一次接受一个项,每次插入后堆不变为true。这两个 - 假设你得到了正确的所有细节 - 将通过构建堆积的东西来完成。
在第一种情况下,请注意,如果数组已满足堆不变量,则不会更改它。这意味着不会更改任何方式来安排相当于有效堆的对象。由于可能存在多个这样的安排 - 特别是如果有相同比较的密钥 - 不能保证您最终的特定安排将匹配从相同项目创建有效堆的任何其他方式。