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

C语言解决TopK问题

前言:

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

问题背景:

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

解题思路:

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

解析:

为什么不能用大堆?

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

建立小堆的妙处:

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

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

空间复杂度:O(K)

相关文章:

C语言解决TopK问题

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

磁盘存储链式结构——B树与B+树

红黑树处理数据都是在内存中,考虑的都是内存中的运算时间复杂度。如果我们要操作的数据集非常大,大到内存已经没办法处理了该怎么办呢? 试想一下,为了要在一个拥有几十万个文件的磁盘中查找一个文本文件,设计的…...

如何批量从sql语句中提取表名

简介 使用的卢易表 的提取表名功能,可以从sql语句中批量提取表名。采用纯文本sql语法分析,无需连接数据库,支持从含非sql语句的文件文件中提取,支持各类数据库sql语法。 特点 快:从成百个文件中提取上千个表名只需1…...

怎么把音频的速度调慢?6个方法调节音频速度

怎么把音频的速度调慢?调慢音频速度不仅可以帮助我们更好地捕捉细节,还能让我们在分析和学习时更加从容。这对于音乐爱好者来说,尤其有助于理解复杂的旋律和和声,使学习过程变得更加高效。而在语言学习中,放慢语速则能…...

K8s-services+pod详解1

一、Service 我们能够利用Deployment创建一组Pod来提供具有高可用性的服务。 虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题: Pod IP 会随着Pod的重建产生变化Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问 这样对于访问这…...

从RNN讲起(RNN、LSTM、GRU、BiGRU)——序列数据处理网络

文章目录 RNN(Recurrent Neural Network,循环神经网络)1. 什么是RNN?2. 经典RNN的结构3. RNN的主要特点4. RNN存在问题——长期依赖(Long-TermDependencies)问题 LSTM(Long Short-Term Memory&a…...

python:假的身份信息生成模块faker

前言 发现一个有趣的python模块(faker),他支持生成多个国家语言下的假身份信息,包含人名、地址、邮箱、公司名、电话号码、甚至是个人简历! 你可以拿它做一些自动化测试,或一些跟假数据有关的填充工作。 代…...

spring task的使用场景

spring task 简介 spring task 是spring自带的任务调度框架按照约定的时间执行某个方法的工具,类似于闹钟 应用场景 cron表达式 周和日两者必定有一个是问号 简单案例...

美畅物联丨剖析 GB/T 28181 与 GB 35114:视频汇聚领域的关键协议

我们在使用畅联云平台进行视频汇聚时,经常会用的GB/T 28181协议,前面我们写了关于GB/T 28181的相关介绍,​ 详见《畅联云平台|关于GB28181你了解多少?》。 ​最近也有朋友向我们咨询GB 35114协议与GB/T 28181有什么不同…...

uni-app 开发的应用快速构建成鸿蒙原生应用

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,它支持编译到 iOS、Android、小程序等多个平台。对于 HarmonyOS(鸿蒙系统),uni-app 提供了特定的支持,允许开发者构建鸿蒙原生应用。 一、uni-app 对 HarmonyOS 的支…...

代码随想录算法训练营| 669. 修剪二叉搜索树 、 108.将有序数组转换为二叉搜索树 、 538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树 题目 参考文章 思路:这题其实就是删除不符合上下边界的节点。注意:这里删除不符合上下边界节点时,这个不符合上下边界的节点的左或右子树可能存在符合上下边界的节点,所i有每次比较完之后,要继…...

Django模型实现外键自关联

Django模型实现外键自关联 1、场景 省市区、评论 2、模型models.py from django.db import models 资讯评论:资讯,用户,是否取消,时间class CommentInfomation(models.Model):info = models...

Android ViewModel

一问:ViewModel如何保证应用配置变化后能够自动继续存在,其原理是什么,ViewModel的生命周期和谁绑定的? ViewModel 的确能够在应用配置发生变化(例如屏幕旋转)后继续存在,这得益于 Android 系统的 ViewMod…...

优先算法1--双指针

“一念既出,万山无阻。”加油陌生人! 目录 1.双指针--移动零 2.双指针-复写零 ok,首先在学习之前,为了方便大家后面的学习,我们这里需要补充一个知识点,我这里所谓的指针,不是之前学习的带有…...

利用弹性盒子完成移动端布局(第二次实验作业)

需要实现的效果如下&#xff1a; 下面是首先是这个项目的框架&#xff1a; 然后是html页面的代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"wid…...

C# 字符串(string)三个不同的处理方法:IsNullOrEmpty、IsInterned 、IsNullOrWhiteSpace

在C#中&#xff0c;string.IsNullOrEmpty、string.IsInterned 和 string.IsNullOrWhiteSpace 是三个不同的字符串处理方法&#xff0c;它们各自有不同的用途&#xff1a; 1.string.IsNullOrEmpty&#xff1a; 这个方法用来检查字符串是否为null或者空字符串&#xff08;"…...

读书笔记 - 虚拟化技术 - 0 QEMU/KVM概述与历史

《QEMU/KVM源码解析与应用》 - 王强 概述 虚拟化简介 虚拟化思想 David Wheeler&#xff1a;计算机科学中任何问题都可以通过增加一个中间层来解决。 虚拟化思想存在与计算机科学的各个领域。 主要思想&#xff1a;通过分层将底层的复杂&#xff0c;难用的资源虚拟抽象为简…...

常见的负载均衡

1.常见的负载均衡服务 负载均衡服务是分布式系统中用于分配网络流量和请求的关键组件&#xff0c;它可以帮助提高应用程序的可用性、可扩展性和响应速度。以下是一些常用的负载均衡服务&#xff1a; Nginx&#xff1a;一个高性能的Web服务器和反向代理&#xff0c;广泛用于实现…...

利用sessionStorage收集用户访问信息,然后传递给后端

这里只是简单的收集用户的停留时间、页面加载时间、当前页面URL及来源页面&#xff0c;以做示例 <html><head><meta http-equiv"content-type" content"text/html; charsetUTF-8"/><title>测试sessionStorage存储用户访问信息<…...

什么是Qseven?模块电脑(核心板)规范标准简介二

1.概念 Qseven是一种通用的、小尺寸计算机模块标准&#xff0c;适用于需要低功耗、低成本和高性能的应用。 Qseven模块电脑&#xff08;核心板&#xff09;采用230Pin金手指连接器 2.Qseven的起源 Qseven最初是由Congatec、SECO、MSC三家欧洲公司于2008年发起&#xff0c;旨在…...

树莓派GPIO排针焊接与外壳组装全攻略:从焊接技巧到机械装配

1. 项目概述与核心价值如果你手头有一块树莓派&#xff0c;并且打算用它来驱动一个像Joy Bonnet这样的游戏手柄扩展板&#xff0c;或者任何其他需要直接插在GPIO排针上的HAT&#xff08;硬件附加板&#xff09;&#xff0c;那么你迟早会面临一个非常具体且有点“劝退”的硬件关…...

物业临时工排班管理的技术破局:栎偲考勤神器的AI与离线方案详解

物业行业临时工排班管理长期面临三大技术痛点&#xff1a;人员流动性大导致班制匹配混乱、多场景打卡数据碎片化、中小企业部署成本高。作为专注考勤工具实测的博主&#xff0c;今天拆解栎偲考勤神器如何通过AI算法与轻量化技术&#xff0c;针对性解决物业临时工排班管理的核心…...

大一学生揭秘科罗拉多矿业学院扫描技术:掌控投影仪和摄像头,问题待修复

大一学生掌控科罗拉多矿业学院投影仪和摄像头&#xff0c;扫描技术揭秘与问题修复情况曝光在科罗拉多矿业学院开启大一生活时&#xff0c;我发现当地 DNS 服务器会为每个连网设备分配子域名&#xff0c;如 “meow” 设备在校园无线网络显示为 “meow.mines.edu”&#xff0c;但…...

Seraphine终极指南:免费开源英雄联盟智能助手完整教程

Seraphine终极指南&#xff1a;免费开源英雄联盟智能助手完整教程 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 在英雄联盟的激烈对局中&#xff0c;你是否曾因错过对局接受而懊恼&#xff1f;是否在BP阶段…...

Linux僵死IO与不可中断睡眠分析

Linux僵死IO与不可中断睡眠分析在 Linux 系统里&#xff0c;有一类问题特别让人困惑&#xff1a;进程存在、CPU 不高&#xff0c;但命令卡住、服务停不下来、甚至 kill 也无效。很多这类现象最终都与不可中断睡眠状态有关&#xff0c;尤其常见于 IO 阻塞场景。中级阶段需要理解…...

FreeRTOS任务通知:轻量级任务通信机制详解与实战应用

1. 项目概述&#xff1a;为什么你需要关注FreeRTOS任务通知&#xff1f;在嵌入式实时操作系统&#xff08;RTOS&#xff09;的开发中&#xff0c;任务间的通信与同步是核心课题。如果你用过FreeRTOS&#xff0c;肯定对队列、信号量、事件组这些通信机制不陌生。它们功能强大&am…...

告别电脑“飞机起飞“噪音:FanControl风扇控制终极指南

告别电脑"飞机起飞"噪音&#xff1a;FanControl风扇控制终极指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tr…...

STM32 I2C驱动AT24C02 EEPROM:手把手教你搞定页边界对齐与连续读写(附完整代码)

STM32 I2C驱动AT24C02 EEPROM&#xff1a;页边界对齐与连续读写实战指南 在嵌入式开发中&#xff0c;EEPROM因其非易失性存储特性成为参数保存的首选方案。而AT24C02作为经典的I2C接口EEPROM&#xff0c;其页写入机制却暗藏玄机——许多开发者第一次遭遇"写入数据丢失&quo…...

Programming Bitcoin最佳实践:10个核心编程技巧助你从零掌握比特币开发 [特殊字符]

Programming Bitcoin最佳实践&#xff1a;10个核心编程技巧助你从零掌握比特币开发 &#x1f680; 【免费下载链接】programmingbitcoin Repository for the book 项目地址: https://gitcode.com/gh_mirrors/pr/programmingbitcoin 想要深入理解比特币技术并掌握区块链编…...

10分钟精通:Bilibili视频下载器完整使用指南与高级技巧

10分钟精通&#xff1a;Bilibili视频下载器完整使用指南与高级技巧 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为无法保存B站…...