ヒープheapqでのPython

実際、Pythonの無い独立したスタック型、およびモジュールのスタック操作の唯一のいくつかの関数が含まれています。このモジュールはheapq(qはキューを表す)、小さなトップデフォルト・ヒープと呼ばれています。Pythonは、ヒープ実装のビッグトップではありません。

一般的に使用される機能

機能 説明
heappush(ヒープ、X) パイルプレス-X
heappop(ヒープ) ポップアップスタック最小の要素から(トップ要素)
([1,2,3])heapify ヒープを持つ特性のリストを作成します
heapreplace(ヒープ、X) 最小の要素(先頭の要素)をポップし、スタックは、xを押下
nlargest(N、ITER) ITERは、nで最大の要素を返します。
nsmallest(N、ITER) ITERは、n個の最小要素を返します

heappopは(常にインデックス0、\スタックで)最小の要素をポップし、インデックス0(スタック保持機能)で最小の残りの要素ことを保証します。

heapreplaceはその後heappushをheappopに等しいが、呼び出しは速くそれらよりでした。

スタック動作時間複雑度は、次の実装のヒープである:バイナリヒープ、フィボナッチヒープ、フィボナッチヒープ......厳密、共通モジュールは、「フィボナッチヒープで使用され

コード例:

from heapq import *

class KthLargest:

    def __init__(self, k: int, nums: List[int]):
        self.k = k
        self.q = []
        for x in nums:
            self.add(x)

    def add(self, val: int) -> int:
        if len(self.q) < self.k:        # 堆没满,加入堆
            heappush(self.q, val)
        elif val > self.q[0]:           # val大于堆顶元素(第K大),踢掉堆顶元素,加入val
            heapreplace(self.q, val)
        return self.q[0]                # 堆顶
import heapq
a = [2,4,1,5,6,3]
heapq.heapify(a)
print(a)       # [1, 4, 2, 5, 6, 3]
import heapq
a = [2,4,1,5,6,3]
heapq.heapify(a)
b = heapq.heappop(a)
print(a)      # [2, 4, 3, 5, 6]
print(b)      # 1

おすすめ

転載: www.cnblogs.com/ldy-miss/p/11984691.html