TOPK问题的求解

news2024/11/27 4:32:12

在这片文章详解二叉树-CSDN博客中我们提到,如果要在非常多的数据(内存存不下)中找到最大或最小的前K个数,我们需要先构建一个K个数的小堆或大堆;再跟堆顶数据比较

要找最大的前K个数建小堆;要找最小的前K个数建大堆

1.构造数据

既然数据在内存中存不下,我们就放到文件中;需要构造一个有很多数据的文件

  • 我们以“w”的方式打开一个文件,如果该文件不存在,则会先创建该文件
  • 假设文件需要100万个数据;使用rand函数随机取数,用fprintf写文件
//构造数据
void CreateData()
{
	srand(time(0));

	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("CreateData:create data fail");
		exit(-1);
	}

	int n = 1000000;
	for (int i = 0; i < n; i++)
	{
		int x = rand() % 1000000 + i;
		fprintf(pf, "%d\n", x);
	}

	fclose(pf);
	pf = NULL;
}

2.建堆

我们就拿取最大的前K个数来示范了,取最小的前K个数只要将建小堆改成建大堆即可

  • 首先向文件读取k个数据,放到创建好的数组中
  • 利用向下调整算法,将这k个数建成小堆
	//建小堆
	int* minHeap = (int*)malloc(sizeof(int) * k);
	if (minHeap == NULL)
	{
		perror("PrintTOPK:malloc fail");
		exit(-1);
	}

	for (int i = 0; i < k; i++)
	{
		fscanf(pf, "%d", &minHeap[i]);
	}
	
	for (int i = (k - 1 - 1) / 2; i >= 0; i--)
	{
		AdjustDown(minHeap, k, i);
	}

3.与堆顶数据比较

  • 利用fscanf的返回值来判断文件是否结束
  • 将读取到的数据与堆顶数据比较,如果比堆顶数据大,则交换,再对堆顶数据执行一次向下调整
	//堆顶数据与文件后面数据比较
	int x = 0;
	while (fscanf(pf, "%d", &x) != EOF)
	{
		if (x > minHeap[0])
		{
			minHeap[0] = x;
			AdjustDown(minHeap, k, 0);
		}
	}

4.复杂度计算

空间复杂度:O(K)

时间复杂度:O(N*\log_{2}{K} )


源码:TOPK/TOPK · baiyahua/LeetCode - 码云 - 开源中国 (gitee.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1267170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ZooKeeper的分布式锁---客户端命令行测试(实操课程)

本系列是zookeeper相关的实操课程&#xff0c;课程测试环环相扣&#xff0c;请按照顺序阅读测试来学习zookeeper。阅读本文之前&#xff0c;请先阅读----​​​​​​zookeeper 单机伪集群搭建简单记录&#xff08;实操课程系列&#xff09;。 阅读本文之前&#xff0c;请先阅读…

Ajax的使用方法

1,什么是Ajax&#xff1f; Ajax&#xff08;异步Javascript和XML&#xff09;&#xff0c;是指一种创建交互式网页应用的网页开发技术。 2&#xff0c;Ajax的作用 Ajax可以使网页实现异步更新----即在不更新整个页面的情况下实现对某一部分进行更新。 简单来说Ajax就是用于连接…

不测试,不安全 —— 安全测试的重要性!

1、 什么是安全测试 安全测试是一种软件测试&#xff0c;可发现软件应用程序中的漏洞&#xff0c;威胁&#xff0c;风险并防止来自入侵者的恶意攻击。 安全测试的目的是确定软件系统的所有可能漏洞和弱点&#xff0c;这些漏洞和弱点可能导致信息&#xff0c;收入损失&#xff…

中兴小鲜50 ZTE 畅行50 刷机救砖演示机7543n root 虎贲 展锐 T760 解锁BL

系统信息 网络制式 支持中国移动、中国电信、中国联通、中国广电四大运营商5G频段&#xff1b;支持4G/3G/2G 系统平台 MyOS 13.0&#xff08;基于Android 13&#xff09; 硬件信息 处理器 展锐T760&#xff0c;高性能8核5G芯片 存储 6GB RAM128GB ROM 扩展 不支持 电池容…

centos7内核升级(k8s基础篇)

1.查看系统内核版本信息 uname -r 2.升级内核 2.1更新yum源仓库 yum -y update更新完成后&#xff0c;启用 ELRepo 仓库并安装ELRepo仓库的yum源 ELRepo 仓库是基于社区的用于企业级 Linux 仓库&#xff0c;提供对 RedHat Enterprise (RHEL) 和 其他基于 RHEL的 Linux 发行…

【算法萌新闯力扣】:环形链表及环形链表II

力扣题目&#xff1a;环形链表及环形链表II 开篇 今天是备战蓝桥杯的第26天和算法村开营第4天。挑选了链表的黄金关卡与大家分享。 题目一&#xff1a;环形链表 题目链接: 141.环形链表 题目描述 方法一、哈希表 判断是否有环&#xff0c;可以利用哈希表&#xff0c;遍历…

视图层与模板层

视图层 1 视图函数 一个视图函数&#xff0c;简称视图&#xff0c;是一个简单的Python 函数&#xff0c;它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容&#xff0c;一个重定向&#xff0c;一个404错误&#xff0c;一个XML文档&#xff0c;或者一张图片. . . 是…

CSS特效021:蛇形左右扭动的效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…

互联网洗鞋店小程序怎么做,流程有哪些?

洗鞋店小程序让洗鞋更便捷高效&#xff0c;用户只需通过手机预约&#xff0c;即可享受上门取送服务&#xff0c;省时省力&#xff0c;让鞋子焕然一新。下面我们详细介绍这个小程序的功能&#xff1a; 1. 轻松预约&#xff1a;用户可以随时随地通过洗鞋店小程序预约洗鞋服务&…

【理解ARM架构】异常处理

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《理解ARM架构》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 ⚡ARM系统中异常与中断处理流程&#x1f362;向量表&#x1f362;保存现场&#x1f362;恢…

Mendix组件推荐:灵活的在线表格

- 视频 mendix在线表格.mp4 20.95MB - 客户需求 如果你是一个中小型企业的负责人&#xff0c;你可能面临着&#xff1a; 多人协作录入数据展示数据库中的数据对数据安全有要求、希望本地离线部署并且IT人员配置有限等挑战 为了更好地管理你的业务数据&#xff0c;你需要一个…

【IEEE出版】2024年第四届消费电子与计算机工程国际学术会议(ICCECE 2024)

2024年第四届消费电子与计算机工程国际学术会议&#xff08;ICCECE 2024&#xff09; 2024 4th International Conference on Consumer Electronics and Computer Engineering 进入21世纪以来&#xff0c;计算机技术的高速发展带来了消费电子产品的快速更迭。在技术迅速发展历…

WMS仓储管理系统的实施流程是什么

WMS仓储管理系统是现代企业不可或缺的重要工具&#xff0c;它可以有效地优化仓库管理&#xff0c;提高工作效率&#xff0c;减少误差。但是&#xff0c;实施WMS仓储管理系统并不是一件轻松的事情&#xff0c;需要经过一系列的步骤来确保其成功实施。本文将详细介绍WMS仓储管理系…

建立健全涉密测绘外业安全保密管理制度,落实监管人员和保密责任,外业所用涉密计算机纳入涉密单机进行管理

建立健全涉密测绘外业安全保密管理制度&#xff0c;落实监管人员和保密责任&#xff0c;外业所用涉密计算机纳入涉密单机进行管理 1.涉密测绘外业安全保密管理制度 2.外业人员及设备清单&#xff08;包括&#xff1a;外业从业人员名单、工作岗位&#xff0c;外业设备名称、密…

【网络安全】-安全常见术语介绍

文章目录 介绍1. 防火墙&#xff08;Firewall&#xff09;定义通俗解释 2. 恶意软件&#xff08;Malware&#xff09;定义通俗解释 3. 加密&#xff08;Encryption&#xff09;定义通俗解释 4. 多因素认证&#xff08;Multi-Factor Authentication&#xff0c;MFA&#xff09;定…

如何在ASO优化策略中确定季节性的框架

由于我们全年都需要考虑许多季节性事件&#xff0c;因此可能会让人不知所措&#xff0c;我们需要遵循一个清晰的框架来在ASO策略中处理季节性事件。 1、进行应用的研究。 确定与我们应用或游戏相关的所有季节性事件。查看所有三种类型&#xff1a;假期、行业活动和预期的特定于…

dockerfile介绍与使用

文档&#xff1a;https://docs.docker.com/engine/reference/builder/ dockerfile介绍 dockerfile是什么 Dockerfile是一个创建镜像所有命令的文本文件, 包含了一条条指令和说明, 每条指令构建一层, 通过 docker build命令,根据Dockerfile的内容构建镜像,因此每一条指令的内…

商品橱窗和抖音小店有什么区别?新手应该选择哪一个?

我是电商珠珠 在抖音小店内&#xff0c;有两种经营方式&#xff0c;一种是商品橱窗&#xff0c;还有一种是抖音小店。 很多人会将他们混之一谈&#xff0c;说开抖店需要粉丝&#xff0c;商品橱窗不用。 事实真的是这样吗&#xff1f; 接下来&#xff0c;我就来给大家讲讲二…

UE Web Remote Control

前言 最近在研究UE自启WEB服务和网页通信以此来通过网页与UE进行数据交互&#xff0c;这样最好的方式就是可以摒弃掉整个繁琐的通信连接流程如TCP UDP&#xff0c;但是找到的一些方法都不是很适用&#xff0c;尤其是WEBUI这个插件它只适合内嵌到UE本身才能完成交互&#xff0c;…

PCB设计注意事项

四个二极管不能省略 pwm波跟电机频率不要是倍频 运放越靠近取样电阻越好 反向输入端跟输出端很敏感&#xff0c;有寄生电容就容易震荡 距离取样电阻近就会距离单片机远&#xff0c;那么线上会有寄生电容&#xff0c;这时候在输出端接一个10k电阻到地