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

C语言解决TopK问题

前言:

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

问题背景:

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

解题思路:

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

解析:

为什么不能用大堆?

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

建立小堆的妙处:

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

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

空间复杂度:O(K)

http://www.lryc.cn/news/459669.html

相关文章:

  • 磁盘存储链式结构——B树与B+树
  • 如何批量从sql语句中提取表名
  • 怎么把音频的速度调慢?6个方法调节音频速度
  • K8s-services+pod详解1
  • 从RNN讲起(RNN、LSTM、GRU、BiGRU)——序列数据处理网络
  • python:假的身份信息生成模块faker
  • spring task的使用场景
  • 美畅物联丨剖析 GB/T 28181 与 GB 35114:视频汇聚领域的关键协议
  • uni-app 开发的应用快速构建成鸿蒙原生应用
  • 代码随想录算法训练营| 669. 修剪二叉搜索树 、 108.将有序数组转换为二叉搜索树 、 538.把二叉搜索树转换为累加树
  • Django模型实现外键自关联
  • Android ViewModel
  • 优先算法1--双指针
  • 利用弹性盒子完成移动端布局(第二次实验作业)
  • C# 字符串(string)三个不同的处理方法:IsNullOrEmpty、IsInterned 、IsNullOrWhiteSpace
  • 读书笔记 - 虚拟化技术 - 0 QEMU/KVM概述与历史
  • 常见的负载均衡
  • 利用sessionStorage收集用户访问信息,然后传递给后端
  • 什么是Qseven?模块电脑(核心板)规范标准简介二
  • leetcode数组(三)-有序数组的平方
  • HCIP-HarmonyOS Application Developer 习题(五)
  • 【详细教程】如何使用YOLOv11进行图像与视频的目标检测
  • H7-TOOL的LUA小程序教程第14期:任意波形信号发生器,0-20mA输出和微型数控电源(2024-10-11,已更新)
  • Redis面试篇3
  • 集成方案 | 借助 Microsoft Copilot for Sales 与 Docusign,加速销售流程!
  • k8s 1.28.2 集群部署 MinIO 分布式集群
  • HAL库常用的函数:
  • 如何捕捉行情爆发的前兆
  • 【万字长文】Word2Vec计算详解(一)CBOW模型
  • React Native源码学习