Java 通过插入实现构建堆函数
您能告诉我这两个用于构建堆的伪代码是否总是返回相同的堆吗? 这是众所周知的经典构建堆代码: BuildHeapA//A是未排序的数组Java 通过插入实现构建堆函数,java,algorithm,heap,implementation,Java,Algorithm,Heap,Implementation,您能告诉我这两个用于构建堆的伪代码是否总是返回相同的堆吗? 这是众所周知的经典构建堆代码: BuildHeapA//A是未排序的数组 for(i = A.size/2 down to 1) do MaxHeapify(A,i) 这是使用插入代码构建堆的过程: 通过插入构建最大堆 谢谢 看起来您指的是从头开始构建堆的线性时间方式,并将其与迭代构建堆进行比较,每次接受一个项,每次插入后堆不变为true。假设所有细节都正确,这两种方法都将通过构建一个堆来完成 在第一种情况下,请注意,如果
for(i = A.size/2 down to 1) do
MaxHeapify(A,i)
这是使用插入代码构建堆的过程:
通过插入构建最大堆
谢谢 看起来您指的是从头开始构建堆的线性时间方式,并将其与迭代构建堆进行比较,每次接受一个项,每次插入后堆不变为true。假设所有细节都正确,这两种方法都将通过构建一个堆来完成
在第一种情况下,请注意,如果数组已经满足堆不变量,则不会对其进行更改。这意味着,构成有效堆的对象的任何排列方式都不会改变。因为可能有不止一种这样的安排——特别是如果有相同比较的键的话——不能保证您最终使用的特定安排将与从相同项创建有效堆的任何其他方式相匹配。我认为您需要更详细地说明您正在做什么以及术语的含义。你能提供这个众所周知的BuildHeap代码的参考吗?@PeterLawrey:
heapsize[A] = 1
for i=2 to length[A]
Max-Heap-Insert(A,A[i])