gpt4 book ai didi

Python heapq使用详解及实例代码

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 29 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python heapq使用详解及实例代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

 Python heapq 详解 。

Python有一个内置的模块,heapq标准的封装了最小堆的算法实现。下面看两个不错的应用.

小顶堆(求TopK大) 。

话说需求是这样的: 定长的序列,求出TopK大的数据.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import heapq
import random
 
class 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小的元素,即使用大顶堆.

算法实现的核心思路是:将push(e)改为push(-e)、pop(e)改为-pop(e).

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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])

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持! 。

最后此篇关于Python heapq使用详解及实例代码的文章就讲到这里了,如果你想了解更多关于Python heapq使用详解及实例代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com