2016-07-22 2 views
0

私は今ヒープの実装を理解しようとしており、私はヒープのpythonモジュールを調べます。
https://github.com/python-git/python/blob/master/Lib/heapq.py
Line236は、ヒープ配列の最後の要素に新しい項目を追加し、最後の要素を上方向に移動しようとするので、私に分かりやすいように見えます。その正しい位置。
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のように見えます。私は何かを誤解していますか?

答えて

1

これはちょうど命名法の衝突です。彼らが "シフトアップ"と呼んでいるものは、葉に向かって旋回しています。おそらく、考え方は、最小ヒープでは、大きなアイテムが葉に向かって「上に」移動するということです。

"siftdown"はルートに向かって移動します。

私たちのコンピュータの人たちは通常、(?)と思っているものとは逆ですが、それは一貫しています。あなたが物理的な木を描いていれば理にかなっています。庭や秋に育ったものは、葉をすくい取って処分しなければなりません。

+0

OK、このツリーのルートが下にある場合は意味があります。 –

関連する問題