首页 > 编程语言 > 详细

python 大顶堆 小顶堆

时间:2015-11-11 14:35:27      阅读:295      评论:0      收藏:0      [点我收藏+]
http://www.coder4.com/archives/3844

需1求:给出N长的序列,求出TopK大的元素,使用小顶堆,heapq模块实现。

上面的用heapq就能轻松搞定。

变态的需求来了:给出N长的序列,求出BtmK小的元素,即使用大顶堆。

heapq在实现的时候,没有给出一个类似Java的Compartor函数接口或比较函数,开发者给出了原因见这里:http://code.activestate.com/lists/python-list/162387/

于是,人们想出了一些很NB的思路,见:http://stackoverflow.com/questions/14189540/python-topn-max-heap-use-heapq-or-self-implement

我来概括一种最简单的:

将push(e)改为push(-e)、pop(e)改为-pop(e)。

也就是说,在存入堆、从堆中取出的时候,都用相反数,而其他逻辑与TopK完全相同,看代码:

经过测试,是完全没有问题的,这思路太Trick了……

 

python 大顶堆 小顶堆

原文:http://www.cnblogs.com/i80386/p/4955892.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!