Min-Heapify-Methode - Min-heap-Algorithmus
Ich versuche zu bauen, ein min-heap. Habe ich bereits getan, einfügen, löschen,tauschen, bis heap, nach unten heap, und es arbeitet richtig.
Allerdings bin ich zu schreiben versucht, eine Methode die für Min-Heapify.
Hier mein Input: {20,14,9,6,4,5,1}
Die Ausgabe, die ich erwartet, wäre für die min-heap: {1,5,4,20,9,6,14}
Aber Was ich bekam ist : {14,6,9,20,4,5,1}, ist das Gegenteil.
Hier ist mein code:
public void minHeapify(int parentIndex)
{
int left = getLeft(parentIndex);
int right = getRight(parentIndex);
int smallest = parentIndex;
if(_size >right && _heapArray[left]<_heapArray[parentIndex])
{
smallest = left;
}
if(_size>left && _heapArray[right]<_heapArray[parentIndex])
{
smallest = right;
}
if(smallest !=parentIndex)
{
replace(parentIndex, smallest);
minHeapify(smallest);
}
}
Folgte ich dieser pseudocode für die MAX-Heapify
Heapify (A, i)
l ← left [i]
r ← right [i]
if l ≤ heap-size [A] and A[l] > A[i]
then largest ← l
else largest ← i
if r ≤ heap-size [A] and A[i] > A[largest]
then largest ← r
if largest ≠ i
then exchange A[i] ↔ A[largest]
Heapify (A, largest)
InformationsquelleAutor COLD ICE | 2013-03-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist ein Tippfehler in dem Teil, der soll zu prüfen, das linke Kind. Die Linie
sollte
Gibt es eine ähnliche typo auf der rechten Seite (sieht aus wie ersetzt Ihr die
left
undright
an der falschen Stelle), aber es gibt auch einen ernsten logischen Fehler. Die folgende Zeile:Sollte eigentlich (korrigiert wird der Tippfehler und logische Fehler):
Weil Sie auswählen müssen, je nachdem was kleiner ist von
left
oderright
. Wenn Sie nur überprüfen_heapArray[right]<_heapArray[parentIndex]
dann wirst du die swap-Elternteil mit dem Kind Recht, wenn das Rechte Kind ist kleiner als die Eltern, auch wenn das linke Kind kleiner ist als das Rechte Kind.Übrigens, Sie könnten auch check gegen
heapArray[smallest]
stattheapArray[parentIndex]
auf der linken Seite, da Sie initialisierensmallest
zuparentIndex
früher.Genial. Freut mich zu hören das alles funktioniert jetzt.
InformationsquelleAutor angelatlarge