使用2G内存求20亿个数字中出现次数最多的N个

news2024/11/20 2:23:57

又是一个TOP -N的题目

我看了一下CSDN上大多数人的回答和GPT说的差不多,都是说使用哈希之类的;

我今天说一下我的解法,首先说一下不太快的基础解法

20亿数字使用uint32需要80GB,

(1)分为40块读取,每次2GB,排序后写入文件;

(2)对40个文件使用滑块方式推进合并,块大小50M,合并为一个大文件;

(3)重新扫描这个排序后的大文件。

总体思路就是外部归并排序。

缺点是读写次数太多了。优化一下,

20亿数字,使用UINT32共80GB数据:

1)分为80块,分块读取1G,排序后保存到文件,其中只保存每个数字的次数;所以每个数字需要一个多余的uint32来计数;最差的情况下是每个数字出现1次,保存文件不超过2G;最好的情况下这个文件也许只有8字节;

2)对80个文件归并排序,可以写到一个大文件里,每个文件的滑动块大小为25MB;注意,归并的同时,就可以知道当前最大次数的数字,所以可以不写入合并的大文件;

连GTP看了方案都说好,它评价曰:

1)分块读取和排序:将20亿个数字分成80块,每块1GB大小,这样确保了每个小块可以在内存中进行排序,同时最大限度地减少了内存的使用。
2)压缩存储:在每个小块中,只保存每个数字出现的次数,而不是保存所有数字。这样可以大大减少文件的大小,确保每个文件不超过2GB的限制。
3)归并排序:对80个文件进行归并排序,每次合并时,使用滑动块大小为25MB。这样可以在内存有限的情况下高效地进行归并排序操作。
4)实时统计最大次数的数字:在归并排序的过程中,可以实时统计当前出现次数最多的数字。这样可以避免在最后重新扫描文件来找到最大次数的数字,从而提高了效率。

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

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

相关文章

百面算法工程师 | 传统图像处理——OpenCV

本文给大家带来的百面算法工程师是传统图像处理的面试总结,文章内总结了常见的提问问题,旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中,我们将介绍一些集几何变换和图像平滑处理,并提供参考的回答及其理论基础&…

中国地面气候资料日值数据获取方式

数据简介 环境气象数据服务平台提供了全国大约2100个点位,2000年至2023年的逐日数据。包括气温、气压、湿度、风、降水等要素。 数据基于ECMWF reanalysis-era5-land、reanalysis-era5-single-levels 以及中国2100站点地面气候资料日值观测数据,使用机器…

深入Android ViewModels:Dos和Don‘ts

深入Android ViewModels:Dos和Don’ts 若你正使用ViewModels,务记以下几点以提升代码质量。本系列文章深入探讨了利用Android ViewModels的最佳实践,强调必须遵循和避免的关键点,以提升代码质量。我们将讨论ViewModels在管理UI状…

HarmonyOS开发案例:【生活健康app之编写通用工具类】(5)

本节将介绍日志打印、时间换算等通用工具类的编写和使用,工具类可以简化应用代码编写和业务流程处理。 日志类 日志类Logger旨在提供一个全局的日志打印、日志管理的地方,既可以规范整个应用的日志打印,也方便日后对日志工具类进行修改&…

CV每日论文--2024.5.9

1、Tactile-Augmented Radiance Fields 中文标题:触觉增强的辐射场 简介:我们提出了一种新的场景表示方法,称为"触觉增强的辐射场(Tactile-Augmented Radiance Fields, TaRF)"。这种方法将视觉和触觉信息融合到一个共享的三维空间中。通过拍摄…

【Vue2】关于response返回数据的错误小记

关于Vue2中response返回数据的一个错误小记 如图&#xff0c;在这里返回的时候&#xff0c;后端是通过List< String >返回的&#xff0c;response接收到的实际上是一个Array数组&#xff0c;但是赋值给searchedTaskList的时候&#xff0c;需要在.then包括的范围里面赋值给…

2024年心理健康与人文发展国际学术会议(ICPHHD 2024)

2024年心理健康与人文发展国际学术会议(ICPHHD 2024) 2024 International Conference on Psychological Health and Humanistic Development 一、【会议简介】 2024年心理健康与人文发展国际学术会议&#xff0c;将汇集全球的心理学家和导师、学者。 在这个盛大的学术会议上&am…

智启未来:富唯智能AI-ICDP引领的可重构柔性装配产线

在全球制造业竞争日益激烈的今天&#xff0c;如何快速响应市场变化、提高生产效率、降低生产成本&#xff0c;成为了企业面临的重要挑战。随着产品个性化时代的到来&#xff0c;装配产品频繁变换&#xff0c;多品种小批量的生产模式逐渐成为主流。在这一背景下&#xff0c;富唯…

msix packaging tool打包问题

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

【Linux】Linux——Centos7安装Tomcat

1.下载Tomcat 安装包 官网地址&#xff1a;Apache Tomcat - Apache Tomcat 9 Software Downloadshttps://tomcat.apache.org/download-90.cgi 2.将下载的安装包上传到 Xftp 上&#xff0c;我是直接放到 usr 下了 3.将安装包解压到 /usr/local/ tar -zxvf apache-tomcat-9.0.8…

google地图js,添加标记,以及infowindow信息弹窗

&#xff08;谷歌地图版本V3&#xff09; var contentString "<div classdevinfo><P>设备ID: BJ-20240507</p> <P>设备状态: 正常</p> <P>通讯信号: 89% </p> <P>设备位置: 中国</p> <P>剂量率: 988</p&…

TCP协议的确认应答机制

TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层协议&#xff0c;它在网络通信中扮演着至关重要的角色。其中&#xff0c;确认应答机制是TCP协议中的一个核心概念&#xff0c;它确保了数据的可靠传输。本文将详细介绍J…

【原创】springboot+mysql物资库存管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

SSIM(Structural Similarity),结构相似性及MATLAB实现

参考文献 Wang, Zhou; Bovik, A.C.; Sheikh, H.R.; Simoncelli, E.P. (2004-04-01). “Image quality assessment: from error visibility to structural similarity”. IEEE Transactions on Image Processing. 13 (4): 600–612. Bibcode:2004ITIP…13…600W. CiteSeerX 10.…

IDEA-SpringBoot项目启动类位置错误导致启动报错

文章目录 前言&#xff1a;本文为SpringBoot项目启动类位置错误导致启动报错解决方案 笔者在初学SpringBoot项目时遇到过因启动类位置错误导致项目启动报错现象&#xff0c;总结如下&#xff1a; SpringBoot启动发送请求后遇到如下错误&#xff1a; Postman界面信息&#xff1…

Spring框架学习笔记(一):Spring基本介绍(包含IOC容器底层结构)

1 官方资料 1.1 官网 https://spring.io/ 1.2 进入 Spring5 下拉 projects, 进入 Spring Framework 进入 Spring5 的 github 1.3 在maven项目中导入依赖 <dependencies><!--加入spring开发的基本包--><dependency><groupId>org.springframework<…

OAuth 2.0 和 OAuth 2.1

OAuth 2.0 和 OAuth 2.1比较&#xff1a; OAuth 2.0 和 OAuth 2.1 是授权框架的不同版本&#xff0c;它们用于允许应用程序安全地访问用户在另一个服务上的数据。以下是它们之间的一些主要区别&#xff1a; 安全性增强&#xff1a;OAuth 2.1 旨在提高安全性&#xff0c;它整合…

IIC通信问题一般分析方法

IIC通信问题一般分析方法 一&#xff0c;简介二&#xff0c;分析思路三&#xff0c;总结 一&#xff0c;简介 在工作中很多设备都是使用IIC协议进行通信&#xff0c;比如音频功放芯片等&#xff0c;那就常常会遇到很多IIC通信异常的问题&#xff0c;本文主要介绍对于IIC问题&a…

C++算法题 - 图

目录 200. 岛屿数量130. 被围绕的区域133. 克隆图399. 除法求值207. 课程表210. 课程表 II 200. 岛屿数量 LeetCode_link 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围…

Android 屏幕适配全攻略(中)-从九宫格到矢量图,揭秘Android多屏幕适配的正确打开方式

在移动互联网时代&#xff0c;无论是小小的手机屏幕&#xff0c;还是大大的平板显示器&#xff0c;Android 应用都必须做到完美适配&#xff0c;给用户以极佳的体验。本文将剖析 Android 多屏幕适配背后的种种技术细节&#xff0c;为您揭开最佳实践的正确打开方式&#xff0c;让…