【Python】heapq
6991 ワード
Pythonのheap queueアルゴリズム
完全なバイナリツリーはheaq実装,heaqは配列(リスト)実装を用いる.
したがってheapの作成時には[]に初期化されたlistを使用します.
heapqの使用
Pythonにはheapqという内蔵モジュールがあります.このheapqを使用して優先キューを実装できます.PriorityQueueというモジュールも存在し、heapqはパフォーマンスの面でずっと優れています.
Pythonでheapqを使用するには、次のような内容をインポートする必要があります.
hipは配列を利用して実現されるので,最小hipを作成するには配列を初期化する.
heapq.heappush(heap, item)
お尻を押すにはheapqモジュールのheappushという関数を使用する必要があります.
heapq.heappop(heap)
pop hipの最小要素を使用する場合は、heapqモジュールのheapppopという関数を使用する必要があります.
heapq.heappushpop(heap, item)
お尻から押すとポップが踊れる関数もあります.heappush+heapppopよりも効率的です.
heapq.heapify(list)
listxをheapに変換します.この場合はリニアタイムが必要です.
お尻に入った要素をすべて外に置くと、whileheapと呼ばれると取り出しやすいです.
完全なバイナリツリーはheaq実装,heaqは配列(リスト)実装を用いる.
したがってheapの作成時には[]に初期化されたlistを使用します.
heapqの使用
Pythonにはheapqという内蔵モジュールがあります.このheapqを使用して優先キューを実装できます.PriorityQueueというモジュールも存在し、heapqはパフォーマンスの面でずっと優れています.
Pythonでheapqを使用するには、次のような内容をインポートする必要があります.
import heapq
heapqの作成hipは配列を利用して実現されるので,最小hipを作成するには配列を初期化する.
import heapq
queue = []
heapq pushheapq.heappush(heap, item)
お尻を押すにはheapqモジュールのheappushという関数を使用する必要があります.
import heapq
queue = []
heapq.heappush(queue, 1)
heapq.heappush(queue, 2)
heapq.heappush(queue, -3)
heapq popheapq.heappop(heap)
pop hipの最小要素を使用する場合は、heapqモジュールのheapppopという関数を使用する必要があります.
import heapq
queue = []
heapq.heappush(queue, 1)
heapq.heappush(queue, 2)
heapq.heappush(queue, -3)
element = heapq.heappop(queue) # -3
heapq pushそれから直接popheapq.heappushpop(heap, item)
お尻から押すとポップが踊れる関数もあります.heappush+heapppopよりも効率的です.
import heapq
queue = []
heapq.heappush(queue, 1)
heapq.heappush(queue, 2)
heapq.heappush(queue, -3)
element = heapq.heappushpop(queue, -4) # -4
heapq[]を直接heapに変換heapq.heapify(list)
listxをheapに変換します.この場合はリニアタイムが必要です.
import heapq
queue = [-4, 1, 2, -3]
heapq.heapify(queue)
アルゴリズムの問題を解くときのヒントお尻に入った要素をすべて外に置くと、whileheapと呼ばれると取り出しやすいです.
import heapq
queue = []
heapq.heappush(queue, 1)
heapq.heappush(queue, 2)
heapq.heappush(queue, -3)
heapq.heappush(queue, -4)
while queue:
element = heapq.heappop(queue)
print(element)
# 결과 (가장 작은 값부터 pop되는 것을 볼 수 있다.)
# -4
# -3
# 1
# 2
注意:https://docs.python.org/3/library/heapq.htmlReference
この問題について(【Python】heapq), 我々は、より多くの情報をここで見つけました https://velog.io/@nayoon-kim/파이썬-heapqテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol