Python 用最小堆获取大量元素 topk 大个元素
2021-06-07 00:05
标签:cap 一个 top lis class dom lan 直接 迭代 Python 用最小堆获取大量元素 topk 大个元素 标签:cap 一个 top lis class dom lan 直接 迭代 原文地址:https://www.cnblogs.com/jiaoran/p/14589864.htmlimport heapq
class TopK:
"""
获取大量元素 topk 大个元素,固定内存
思路:
1. 先让入元素前 k 个建立一个最小堆
2. 迭代剩余元素:
如果当前元素小于堆顶元素,跳过该元素
否则替换堆顶元素为当前元素,并重新调整堆
"""
def __init__(self, iterable, k):
self.minheap = []
self.capacity = k
self.iterable = iterable
def push(self, val):
if len(self.minheap) >= self.capacity:
min_val = self.minheap[0]
if val