Ich versuche, die Implementierung von Heap jetzt zu verstehen, und ich schaue in Heapq-Modul von Python.
Line236 ist der Anfang des Codes von siftdown, das seltsame Ding ist, es sieht wie ein Siftup für mich aus, weil es ein neues Element auf dem letzten Element des Heap-Arrays hinzufügt und versucht, das letzte Element nach oben zu verschieben seine richtige Position.
Implementieren von Siftdown-Funktion verletzt Heap formale Definition?
while pos > startpos:
parentpos = (pos - 1) >> 1
parent = heap[parentpos]
if newitem < parent:
heap[pos] = parent
pos = parentpos
continue
break
Es reduziert den Index der aktuellen Position (pos-1) // 2 und schließlich der pos zum Index kann 0. So ist es wie ein siftup mir aussieht. Versteh ich etwas falsch?
OK, es macht Sinn, wenn dieser Baum unten Wurzel hat. –