1
単純なヒープがリストのリストとして定義されています。私はheapopheapqモジュールを使用して、最小のキー(暗黙のうちに内部リストの最初の要素であることがわかった)を使ってリストを抽出しました。しかし、以下のケースでは、ポップ作戦が珍しい結果を出すようです。ヒープップの異常な結果ですか?
誰かが理由を説明できますか?
ヒープ= [0、0、0]、[INF、1、1]、[INF、2、2]、[5]、[3,3]、[INF、4,4]
heapq.heappop(ヒープ)
[0,0,0]
heapq.heappop(ヒープ)
[INF、1、1]
heapq.heappop(ヒープ)
[5,3、3]
heapq.heappop(ヒープ)
[INF、2,2]
heapq.heappop(ヒープ)
[INF、4、4]
何いくつかの操作を実行している間、私はいくつかの値にinfファイルを変更した場合は?私は再びheapifyを実行する必要がありますか? – Janmajay
注文を変更する可能性がある場合は、再度heapifyする必要があります。それは魔法ではなく、標準化されたソートアルゴリズムです。 1つの選択肢は、変更したいリストをヒープアウトして新しいリストに追加することです。リストをヒープとして保持する場合は、ヒープ操作を使用して変更する必要があります –
heapq.heapreplaceは、ポップとプッシュの両方を同時に行うことができる機能です –