41-中央値のデータ・ストリーム

トピック:データ・ストリームの中央値を取得するには?

インポートheapqの
クラスGetMedian(オブジェクト):
    デフ__init __(自己):
        self.max_heap = [] 
        self.min_heap = [] 
        self.k = 0 
    DEF(自己、データ)を挿入:
        もしself.k%2 == 0:
            X = heapq.heappushpop(self.min_heap、データ)
            heapq.heappush(self.max_heap、X)
            self.k + = 1 
        さもなければ:
            heapq.heappush(self.min_heap、データ)
            self.k + = 1 
    DEF get_median(自己):
        self.k%2の場合:
            [0] heapq.nlargest(1、self.max_heap)を返す
        。そうでなければ
            [0] + heapq.nsmallest(1、self.min_heap))リターン(heapq.nlargest(1、self.max_heap 0])/ 2

注:大小の屋根の上のヒープの使用は、大規模なストレージ・スタックの左上部分の数が少ない、ストレージスタックの小さな右上部分の多数を達成するためにスタック。場合挿入の数、数が偶数である場合、第一小さいインサートスタックトップ、スタックの上部が最小値を取得し、その後、大トップスタックに挿入;数が奇数の場合、小さなトップパイルを挿入スタックの最大上部を取得し、次にインサートトップ小さなヒープ。

おすすめ

転載: www.cnblogs.com/kingshine007/p/11360989.html