我正在努力研究如何将maxHeap更改为minHeap。我目前有一个maxHeap算法,但我想知道如何更改它。这是我使用的maxHeap:
public static int [][] fixheap(int heap[][], int n, int i){
int j=2*i;
int weight = heap[i][0];
while (j<=n){
if((j<n) && heap[j][0] < heap[j+1][0])
j++;
if(weight >= heap[j][0]) break;
else
heap[j/2][0] = heap[j][0];
j=j*2;
}
heap[j/2][0]= data;
return heap;
}
public static void makeheap(int heap[][], int n){
for (int i=n/2; i>=0; i--){
fixheap(heap, n ,i);
}
}
我试图扭转一些似乎相关的标志,但我还没有找到minHeap。任何帮助都会很棒,谢谢。
答案 0 :(得分:1)
最小和最大堆之间的唯一区别是比较器。如果你有一个正常运行的最大堆结构,你应该只需要翻转比较器。
在亚马逊上查看Introduction to Algorithms。最大堆结构的描述非常详细,可在预览或“Look Inside”功能中使用。