当前位置: 首页 > news >正文

C语言解决TopK问题

前言:

本文TopK问题是在数据量很大的前提下进行解决,当数据量足够大时,内存中存不下,只能存到文件硬盘中。当存到硬盘中,我们无法用建堆,一个一个pop取出最值的方式解决,因为我们没法在硬盘中去访问数组下标。那怎么解决呢?

问题背景:

假设有10亿个数据,内存存不下,数据在文件中,找出最大的前K个 K == 100

解题思路:

  1. 读取文件中前K个数据,在内存数组中建立一个小堆
  2. 再依次读取剩下数据,跟堆顶数据比较,大于堆顶,就替换他进堆,接着进行向下调整算法
  3. 所有数据读完,堆里面的数据就是最大的前100个

解析:

为什么不能用大堆?

假设最大的数据在前面已经进堆,那么堆顶元素就是最大的,此时堆顶元素就挡住了剩余其他前TopK的元素进堆

建立小堆的妙处:

只要大于堆顶,就会进堆,较大的数据就会往后面靠,小的数据在前面,不会影响剩下较大的数据进堆。

时间复杂度:O(N*logK)

空间复杂度:O(K)


http://www.mrgr.cn/news/49526.html

相关文章:

  • tiktok x-bougs signature 分析
  • leetcode 491.非递减子序列
  • WindowsAPI|每天了解几个winAPI接口之Iphlpapi.h网络配置相关文档详细分析二
  • finebi面试题精选
  • 芋道快速开发平台学习笔记
  • AD9248驱动的简易示波器设计——FPGA学习笔记21
  • 三、ElementPlus下拉搜索加弹窗组件的封装
  • text2sql: multi-agent实现思路MAC-SQL
  • 动力电池SOC估算方法
  • AI 能否替代程序员?且听我来一唠!
  • 【MySQL】数据库基础指令(一)
  • QT开发--串口通信
  • 短视频为什么让人上瘾
  • 第十六周学习周报
  • QML6 项目生成缓存文件取消办法
  • 【前端】Bootstrap:响应式布局与工具类
  • python库下载镜像
  • jenkins知识整理
  • Python基础常见面试题总结
  • c++面向对象三大特性——多态详解与虚函数,虚函数底层