国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python heapq使用詳解及實例代碼

2020-02-23 04:20:40
字體:
來源:轉載
供稿:網(wǎng)友

 Python heapq 詳解

Python有一個內(nèi)置的模塊,heapq標準的封裝了最小堆的算法實現(xiàn)。下面看兩個不錯的應用。

小頂堆(求TopK大)

話說需求是這樣的: 定長的序列,求出TopK大的數(shù)據(jù)。

import heapqimport randomclass TopkHeap(object):  def __init__(self, k):    self.k = k    self.data = []  def Push(self, elem):    if len(self.data) < self.k:      heapq.heappush(self.data, elem)    else:      topk_small = self.data[0]      if elem > topk_small:        heapq.heapreplace(self.data, elem)  def TopK(self):    return [x for x in reversed([heapq.heappop(self.data) for x in xrange(len(self.data))])]if __name__ == "__main__":  print "Hello"  list_rand = random.sample(xrange(1000000), 100)  th = TopkHeap(3)  for i in list_rand:    th.Push(i)  print th.TopK()  print sorted(list_rand, reverse=True)[0:3]

大頂堆(求BtmK小)

這次的需求變得更加的困難了:給出N長的序列,求出BtmK小的元素,即使用大頂堆。

算法實現(xiàn)的核心思路是:將push(e)改為push(-e)、pop(e)改為-pop(e)。

class BtmkHeap(object):  def __init__(self, k):    self.k = k    self.data = []  def Push(self, elem):    # Reverse elem to convert to max-heap    elem = -elem    # Using heap algorighem    if len(self.data) < self.k:      heapq.heappush(self.data, elem)    else:      topk_small = self.data[0]      if elem > topk_small:        heapq.heapreplace(self.data, elem)  def BtmK(self):    return sorted([-x for x in self.data])

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 延长县| 揭阳市| 中江县| 广安市| 内黄县| 哈巴河县| 瑞安市| 曲水县| 新河县| 喜德县| 邯郸县| 仙游县| 昌邑市| 长垣县| 高淳县| 北京市| 揭阳市| 呼图壁县| 壤塘县| 唐河县| 馆陶县| 建德市| 旅游| 宁德市| 甘肃省| 集安市| 遂溪县| 海口市| 五大连池市| 迁西县| 盘锦市| 浙江省| 黄骅市| 盖州市| 永德县| 呼图壁县| 潜山县| 平罗县| 崇义县| 曲麻莱县| 满洲里市|