TOP-K排序算法,从海量不重复数据中找出最大/小的K个数

TOP-K排序算法旨在从大量不重复数据中找到最大或最小的K个数。通过利用最大堆数据结构,可以有效地存储和更新这些关键元素。文章通过一个1G文件中查找最高频词的例子,阐述了如何在内存限制下,先进行哈希缩小和统计,再用最大堆进行排序,从而解决大数据场景下的TOP-K问题。
摘要由CSDN通过智能技术生成

如题,TOP-K排序的主要功能是找出一堆不重复数据中的最小或最大的几个数,此处我们介绍这种类型题目的某种解法:

最大最小堆,最大堆结构里面的每一个数不都是小于root的值么?和我们要解决的问题很像。由此,我们可以构造一个堆,并且用它来存储我们需要找的那几个数。有这么一个动态flash就很好地揭示了其中关系: top-k动画演示

关于什么是堆在此就不做介绍了,但注意,此处所用的的最大最小堆和数据结构的推排序的堆有区别,不再赘述。下面给出一个例子来供参考:(C++代码)

#include<stdio.h>
#include<iostream>
using namespace std;
struct min_heap{
    min_heap(int n){
        this->size=n;
        for(int i=0;i<size;i++) heap[i]=-1;
    }
    int size;
    int heap[100];
    void add(int n){
        if(n<=heap[0]) return;
        int tem=0;
        heap[0]=n;
        while(tem<size){
            if(2*tem+1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值