最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Python heapq使用详解及实例代码
时间:2017-03-07 编辑:简简单单 来源:一聚教程网
Python有一个内置的模块,heapq标准的封装了最小堆的算法实现。下面看两个不错的应用。
小顶堆(求TopK大)
话说需求是这样的: 定长的序列,求出TopK大的数据。
代码如下 | 复制代码 |
importheapq importrandom
classTopkHeap(object): def__init__(self, k): self.k=k self.data=[]
defPush(self, elem): iflen(self.data) heapq.heappush(self.data, elem) else: topk_small=self.data[0] ifelem > topk_small: heapq.heapreplace(self.data, elem) defTopK(self): return[xforxinreversed([heapq.heappop(self.data)forxinxrange(len(self.data))])] if__name__=="__main__": print"Hello" list_rand=random.sample(xrange(1000000),100) th=TopkHeap(3) foriinlist_rand: th.Push(i) printth.TopK() printsorted(list_rand, reverse=True)[0:3] |
大顶堆(求BtmK小)
这次的需求变得更加的困难了:给出N长的序列,求出BtmK小的元素,即使用大顶堆。
算法实现的核心思路是:将push(e)改为push(-e)、pop(e)改为-pop(e)
代码如下 | 复制代码 |
classBtmkHeap(object): def__init__(self, k): self.k=k self.data=[]
defPush(self, elem): # Reverse elem to convert to max-heap elem=-elem # Using heap algorighem iflen(self.data) heapq.heappush(self.data, elem) else: topk_small=self.data[0] ifelem > topk_small: heapq.heapreplace(self.data, elem) defBtmK(self): returnsorted([-xforxinself.data]) |
-
上一个: php 中奖概率算法实现代码
-
下一个: 超强多功能php绿色集成环境详解
相关文章
- mybatis基本实例详解 08-03
- C语言 makefile学习及实现实例 08-01
- ps玻璃杯子制作实例 07-26
- Python编程之event对象的用法实例分析 07-20
- 详解Java CountDownLatch完成异步回调实例 07-18
- 数码单反怎么摄影 数码单反实例教程 07-13