提示:这里解决 top K 问题是基于堆数据结构下的,对这块还有问题的可以点以下链接:
https://blog.csdn.net/z_x_m_m_q/article/details/82320357
Top K问题:
Topk问题是一个经典的海量数据处理问题, 在海量数据中找出出现频率最高的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为Top K问题
比如,热搜上每天更新出的排行前10的热门搜索信息,陕西人最爱吃的水果种类等,都可以使用topK问题来解决
海量数据:
海量数据拥有的一大特点就是数据量比较大, 一般情况下内存空间是不足以一次性来存储的,或者处理海量数据是往往有空间上的限制
例如:面试官给你100W个数据,请找出其中最大的前K个数,并且现在仅仅有1M的空间?
在32位操作系统中,默认每个数据为4字节,很显然 1M 的空间是存放不了要处理的目标数据
算法思想:
从大量数据中找出前 K 个最大数为例来说明:
首先以给定数据中的前 K 个数建立小堆,然后从 K+1 个数据开始与堆顶元素作比较,小于或等于堆顶元素时,保持建立的小堆不变;大于堆顶元素时,将该数据与堆顶元素交换ÿ