python利用heapq实现小顶堆(查找最大的N个元素)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
heapq
class BtmkHeap(object): def __init__(self, k): self.k = k self.data = []
def Push(self, elem): # Reverse elem to convert to max-heap num1 = elem[0] num1 = -num1 num2 = elem[1] # Using heap algorighem if len(self.data) < self.k: heapq.heappush(self.data, (num1,num2)) else: topk_small = self.data[0][0] if elem[0] > topk_small: heapq.heapreplace(self.data,(num1,num2))
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
python利用 heapq实现小顶堆(查找最大的 N个元素)
给出序列,求出TopK大的元素,使用小顶堆,heapq模块实现 使用 heappush()时,从数据源增加新元素时会保持元素的堆顺序。 在一个操作中删除现有元素并替换为新值,可以使用 heapreplace()
def BtmK(self): return sorted([(-x[0],x[1]) for x in self.data])
if __name__ == '__main__': a = (100,1) b = (200,2) c = (300,3) d = (400,4) e = (50,5) btm = BtmkHeap(3) btm.Push(a) btm.Push(b) btm.Push(c) btm.Push(e) btm.Push((23,1)) print(btm.BtmK())
结果 [(23, 1), (50, 5), (100, 1)]
class BtmkHeap(object): def __init__(self, k): self.k = k self.data = []
def Push(self, elem): # Reverse elem to convert to max-heap num1 = elem[0] num1 = -num1 num2 = elem[1] # Using heap algorighem if len(self.data) < self.k: heapq.heappush(self.data, (num1,num2)) else: topk_small = self.data[0][0] if elem[0] > topk_small: heapq.heapreplace(self.data,(num1,num2))
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
python利用 heapq实现小顶堆(查找最大的 N个元素)
给出序列,求出TopK大的元素,使用小顶堆,heapq模块实现 使用 heappush()时,从数据源增加新元素时会保持元素的堆顺序。 在一个操作中删除现有元素并替换为新值,可以使用 heapreplace()
def BtmK(self): return sorted([(-x[0],x[1]) for x in self.data])
if __name__ == '__main__': a = (100,1) b = (200,2) c = (300,3) d = (400,4) e = (50,5) btm = BtmkHeap(3) btm.Push(a) btm.Push(b) btm.Push(c) btm.Push(e) btm.Push((23,1)) print(btm.BtmK())
结果 [(23, 1), (50, 5), (100, 1)]