对于找海量的数据中最大(小)个数据的问题被称为TopK问题。
解决这个问题的方法有很多比如排序然后相应的取前K个数据,排序的算法有很多种,其中不乏时间复杂度低的,可问题很多排序算法都需要将所有数据同时加载到内存中去处理,海量数据加载到内存中这无疑是一个很废内存空间的操作,而建堆解决TopK问题就可以解决这个问题。
先将建堆操作的结论告诉大家:

  1. 要TopK最大的就建小堆
  2. 要TopK最小的就建大堆

为什么要反着来呢?
我们来讨论具体操作思路。拿TopK最大举例,要找K个最大数据就先建立一个能放K个数据的小堆,然后对于数据依次遍历数据进行以下循环:

  1. 拿遍历的当前数据和堆顶元素比较大小,如果比堆顶元素小就跳过当前数据。
  2. 如果比堆顶元素大,那就把堆顶元素赋值为这个数据,然后对堆的结构进行调整(向下调整)
  3. 调整之后去遍历下个数据此次循环结束

我们给堆中K个数据就起名TopK,如果每次遍历的过程中遍历的数据比TopK的最小的还小他就没有资格进堆,只有它比最小的堆顶元素大了他才能把堆顶元素取而代之,遍历的过程就是把小的一一淘汰了,最终遍历完所有数据之后堆中数据也就是所有数据中最大的K个了,大家照着上图去思考就能明白。
说完了TopK最大的,要通过建立小堆去完成,相应的TopK最小的,要建立大堆去完成就很好理解了。

建堆解决TopK问题相关推荐

  1. Java最小堆解决TopK问题

    转载自  Java最小堆解决TopK问题 TopK问题是指从大量数据(源数据)中获取最大(或最小)的K个数据. TopK问题是个很常见的问题:例如学校要从全校学生中找到成绩最高的500名学生,再例如某 ...

  2. c语言 topk算法,scala写算法-用小根堆解决topK

    topK问题是指从大量数据中获取最大(或最小)的k个数,比如从全校学生中寻找成绩最高的500名学生等等. 本问题可采用小根堆解决.思路是先把源数据中的前k个数放入堆中,然后构建堆,使其保持堆序(可以简 ...

  3. 小顶堆解决TopK问题

    小顶堆解决TopK问题 这里写自定义目录标题 小顶堆解决TopK问题 问题 代码 问题 TopK问题 代码 #include <bits/stdc++.h> #define N 10 #d ...

  4. [ 数据结构-C实现 ] 用堆解决TopK问题

    TopK问题的引入:想必大家在玩王者农药的时候都遇到过xxx市第xxx韩信,xxx区第xxx赵云.或者说大家今天懒得做饭,想点个外卖,于是乎大家打开美团App,假如说想吃汉堡,大家不知道哪家汉堡好吃, ...

  5. 再写堆(堆的性质,向下调整,建堆,堆的插入删除初始化,堆排序,TopK问题)

    堆的概念 如果有一个关键码的集合K={k0,k1,k2,-,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储再一个一维数组中,并满足:Ki<=K2i+1且Ki<=K2i+1(Ki ...

  6. 《恋上数据结构第1季》二叉堆原理及实现、最小堆解决 TOP K 问题

    二叉堆 BinaryHeap 堆(Heap) 堆的出现 堆简介 二叉堆(Binary Heap) 获取最大值 最大堆 - 添加 最大堆 - 添加优化 最大堆 - 删除 replace 最大堆 - 批量 ...

  7. 【数据结构】用堆排序解决TOPK问题

    题目名称  TOPK问题 目录 题目名称  TOPK问题 1.题目 2.题目分析 3.题目答案 4.题目知识点 4.1TOPK 4.2代码分析 推荐阅读顺序: 1.题目->3.答案->2. ...

  8. [数据结构 -- C语言] 堆实现Top-K问题,原来王者荣耀的排名是这样实现的,又涨知识了

    目录 1.什么是Top-K问题? 1.1 Top-K基本思路 2.Top-K问题逻辑分析 2.1 建堆,大小为K的小堆 2.2 将剩余的N - K 个元素依次与堆顶元素比较,大于就替换 2.3 打印堆 ...

  9. 利用大顶堆实现top-k算法

    有一堆二维坐标点<x1,y1>, <x2, y2>--<xn, yn>, 现在有两个问题: 给出n个坐标点,请对他们进行堆排序.坐标点的大小关系是:如果 xi> ...

最新文章

  1. ffempge 循环_FFmpeg常用使用命令
  2. 【Python】*args 和 **kwargs的用法
  3. 【转载】 regsvr32 注册dll
  4. 终于买了个Dell d400二手笔记本
  5. 邮箱服务器ip地址白名单,申请SSL证书时如何设置IP地址白名单和邮箱白名单
  6. LeetCode 527. 单词缩写(Trie树)
  7. 使用实时摄像头预览的iOS对象检测(六)
  8. 白噪音和粉红噪音煲机_白噪音app体验报告
  9. 维护项目的管理策略案例
  10. 前端特效demo | 一起围观 10 种创意时钟
  11. Kotlin — 使用Eclipse运行第一个Kotlin程序,打印“Hello World”!
  12. 凤凰项目-----读书笔记
  13. 【win10】键盘上Prtsc键快捷截图无法使用的解决办法
  14. python常见函数抽样_Python中从列表中随机抽样函数的语法
  15. [ScyllaHide] 04 ScyllaHide配置报错原因定位
  16. 模拟时钟:时钟根据时间转动
  17. 十一月典型安全事件盘点
  18. [海森推荐]人类相容性:人工智能与控制问题
  19. oracle权限培训,【必看】Oracle用户、权限、角色管理
  20. 计算机软件工程考研考哪些专业,2022考研:软件工程考研考什么科目?

热门文章

  1. 通过修改Delphi 的 RTL,加快Delphi开发的应用程序速度和稳定性
  2. 取 GridView 里 点击当前行的 行数
  3. DataCapa 启动
  4. 样式表放在顶部的好处
  5. 15. 3 Sum (C,Python)
  6. 深度学习-CNN提取图像特征
  7. 7-273 插入排序还是归并排序 (25 分)
  8. 摄像头拍摄后对图片进行图像处理-python(空域增强)
  9. php 405跳转,php采用curl访问域名返回405 method not allowed提示的解决方法
  10. 得到python对象的真实大小