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