0

重複の可能性:
Pythonのヒープにキーを減らす機能を実装するにはどうすればよいですか?

やあ、

Pythonでheapqを使用して、優先キューを実装しています。キュー内のアイテムの優先順位は大幅に変更されます。その場合は、ヒープをヒープ化する必要があります。
問題は、heapqにはヒープ全体をヒープ化するheapify関数しかなく、ヒープ内の特定のアイテムから開始するheapifyがあり、残りはすでに適切に順序付けられたヒープであることを認識していることです(従来のCS教科書heapifyのように)。
各heapify呼び出しはO(lgn)ではなくO(n)であるため、違いは重要です。標準リストを使用してヒープを実装せずに実行できますか?

ありがとう!


私の質問は、Pythonのヒープにキーを減らす機能を実装するにはどうすればよいですか?
そこでの答えは、特定のアイテムの適切なO(lgn)ヒープ化を使用して、ヒープベースのキューを再実装する方法がないことを示しています。

4

1 に答える 1

0

現在のヒープアイテムを無効にし(アイテム内にフラグを立てる)、同じアイテムをヒープ(O(lgn))にプッシュすることで、ヒープに関するこの特定の問題を回避することができました。
これにより、いくつかの無効なアイテム(pop()でクリーンアップ)でヒープが膨らむ可能性がありますが、現在のヒープ位置と新しい位置ベースのヒープを認識しているヒープアイテムでヒープを再実装することは避けられます。

于 2010-12-12T07:28:59.907 に答える