美文网首页
14_堆TopK排序

14_堆TopK排序

作者: 蕴重Liu | 来源:发表于2019-07-22 17:03 被阅读0次
import time
import heapq
import random

class TopK:
    """
    获取k个元素,固定内存
    思路:
    1 放入元素前,建立一个最小堆,k个元素
    2 迭代剩余元素-若当前元素小于堆顶元素,跳过;否则替换堆顶元素为当前元素,并重新调整堆
    """
    def __init__(self, iterable, k):
        self.minheadp = []
        self.capacity = k
        self.iterable = iterable

    def push(self, val):
        if len(self.minheadp) >= self.capacity:
            min_val = self.minheadp[0]
            if val < min_val:
                pass
            else:
                # 返回并删除堆中的最小item
                # 返回并且pop堆顶最小值,推入新的 val 值并调整堆
                heapq.heapreplace(self.minheadp, val)
        else:
            # 前面 k 个元素直接放入minheap
            heapq.heappush(self.minheadp, val)

    def get_topk(self):
        for val in self.iterable:
            self.push(val)
        return self.minheadp

def test():
    i = list(range(100)) # 可迭代元素,节省内存
    random.shuffle(i)
    _ = TopK(i, 10)
    print(_.get_topk())

if __name__ == '__main__':
    test()

相关文章

  • 14_堆TopK排序

  • 堆、堆排序以及TopK问题

    堆的定义 堆是一种特殊的数据结构,可以形象化的看成一颗完全二叉树,一般内部的存储结构为数组;堆中的某个节点总是不大...

  • python 实现堆,优先队列----处理海量数据的topK问题

    堆 处理海量数据的topK,分位数非常合适,优先队列应用在元素优先级排序。比如数组的频率排序非常合适。与基于比较...

  • 二叉树的应用

    1 排序二叉树和堆 用途树结构关系存储方式应用(大根)堆排序完全二叉树根>左子树,根>右子树数组堆排序,取topk...

  • 排序算法

    一、排序算法总结 排序算法题目 排序算法快速排序堆排序归并排序 应用最小K个数(TopK问题)215.数组中的第K...

  • topK的3种解法

    1)局部淘汰法 -- 借助“冒泡排序”获取TopK 思路: (1)可以避免对所有数据进行排序,只排序部分; (2)...

  • TopK 算法的多种实现

    我是前端西瓜哥,今天来整下 TopK 算法。 TopK,即求数组的最小(或最大)的 k 个数,且不要求这些数要排序...

  • TOPK 问题

    TOPK 问题 描述 如从海量数字中寻找最大的 k 个,这类问题我们称为 TOPK 问题,通常使用堆来解决: 求前...

  • 基础算法题目

    爬楼梯 编辑距离 小顶堆 topk 快排序 二分查找 斐波那契数列 两数之和 最大回溯 题目形式:有一个数组,求其...

  • TopK笔记

    面试常见的大数据之TopK 提纲 TopK之单节点(根据值进行排序) 描述:给定一个无序的整数数组,根据值的大小找...

网友评论

      本文标题:14_堆TopK排序

      本文链接:https://www.haomeiwen.com/subject/mpwwlctx.html