ヒープ データ構造を使用して解決する必要がある問題を解決しています。操作は挿入と抽出分によって支配されますが、アイテムのキーを置き換える (増加または減少させる) か、アイテム、キーを完全に削除する必要がある場合があります。モジュールはこれらの操作を提供せheapq
ず、ヒープ内のアイテムを検索するのはO(n)
.heapify
ヒープ プロパティ - これらの操作のすべてが で実行されO(logn)
ます。ただし、問題は、そのような辞書を実装できないことです。
h, bkp = [], {}
heappush(h, (5, 'a'))
bkp['a'] = # index of 'a' in heap
heappush(h, (7, 'b'))
bkp['b'] = # index of 'b' in heap
heappush(h, (1, 'c'))
bkp['c'] = # index of 'c' in heap
# deleting 'a'
h[bkp['a']], h[-1] = h[-1], h[bkp['a']]
h.pop()
heapify(h)
#update indices in bkp
質問 - ヒープに新しく挿入されたアイテムのインデックスを見つけるにはどうすればよいですか? また、削除またはプッシュ操作の後、ヒープ内の既存のアイテムのインデックスを再計算するにはどうすればよいですか?