0
我想了解堆的實現現在,我看着python的heapq模塊。
https://github.com/python-git/python/blob/master/Lib/heapq.py
Line236是siftdown的代碼的開始,奇怪的是,它看起來像是一個siftup,因爲它在堆數組的最後一個元素上添加了一個newitem,並嘗試將最後一個元素向上移動到它的正確位置。
siftdown函數的實現是否違反堆的形式定義?
while pos > startpos:
parentpos = (pos - 1) >> 1
parent = heap[parentpos]
if newitem < parent:
heap[pos] = parent
pos = parentpos
continue
break
它降低了當前位置到(POS-1)// 2,最後的POS索引可以去索引0 所以它看起來像一個siftup給我。我誤解了什麼嗎?
好的,如果這棵樹的根在下面,這是有道理的。 –