海量数据的TopK问题

从海量数据中找出最大的前K个数

一个基本的是思想是分治法,将1亿个数据分成100份,每份100万个数据,找出每份中最大的100个,最终可以在这100*100个数据中找出最大的100个。

快速排序法

我们知道,快排一次的结果是分界点前面的数据比他小,分界点后的比他大,我们可以做如下的讨论
如果分界点后面的数据个数大于k个,那么可以在后面的数据中重复上述过程
如果分界点后面的数据个数小于k个,其个数为m个,那么可以在前面的数据中找到k-m个最大的
因此,我们总可以在这一堆数据中找到前k个比较大的

基于小顶堆来实现TopK

容易证明,小顶堆的堆顶元素是最小的,维护一个K个数据的小顶堆,依次读入一个元素,若元素大于堆顶元素,则将堆顶元素移除,当前元素插入堆顶,并进行调整。

基于优先级队列来实现

维护一个K长的优先级队列,不断把优先级低的数组出队,最终剩下来的就是前k个最大的


在海量数据中找出出现频率最高的前K个数

在这个问题中,我们需要构造一个map来统计频率,然后问题转化为计算value值属于钱k大的问题,这时可以套用基本的TopK问题

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值