资源限制类题目解法,看这一篇就够了!

算法拾遗三十七资源限制类题目

      • 资源限制技巧汇总
        • 32位无符号整数的范围是0~4,294,967,295,现在有一个正好包含40亿个无符号整数的文件,可以使用最多1GB的内存,怎么找到出现次数最多的数
        • 32位无符号整数的范围是0~4294967295,现在又一个正好包含40亿个无符号整数的文件,所以在正哥范围中必然存在没出现过的数,可以使用最多1GB的内存,怎么找到所有未出现的数?
          • 【进阶】内存限制为3KB,但是只用找到一个没出现过的数即可
        • 有一个包含100亿个URL的大文件,假设每个URL占用64B,请找出其中所有重复的URL
        • 32位无符号整数,现在有40亿个无符号整数,可以使用最多1GB的内存,找出所有出现了两次的数
        • 现在有40亿个无符号整数,可以使用最多3K的内存,怎么找到10亿个整数的中位数(找上中位数)
        • 有一个10G大小的文件,每一行都装着这种类型的数字,整个文件是无序的,给你5G的内存空间,请你输出一个10G大小的文件,就是原文件所有数字排序的结果

资源限制技巧汇总

1)布隆过滤器用于集合的建立与查询,并可以节省大量空间
2)一致性哈希解决数据服务器的负载管理问题
3)利用并查集结构做岛问题的并行计算
4)哈希函数可以把数据按照种类均匀分流
5)位图解决某一范围上数字的出现情况,并可以节省大量空间
6)利用分段统计思想、并进一步节省大量空间7)利用堆、外排序来做多个处理单元的结果合并

32位无符号整数的范围是0~4,294,967,295,现在有一个正好包含40亿个无符号整数的文件,可以使用最多1GB的内存,怎么找到出现次数最多的数

如果将数全拿到内存,40亿个无符号整数占用空间大概为16GB,如果使用hash表估算,hash表使用多少内存和数字的个数无关,和到底出现了多少个不同的数字有关系。(如果40亿个数全是1,那么这个hash只占用8字节的空间,但是如果40亿个数都不一样,那么占用空间为32G,那么hash表空间会爆掉的)
如果1G的内存都来做hash表那么能装下多少记录?
基本上是一亿两千五百万条记录,可能还有一些其他的代价,那么就假设hash表只能装下一千万条记录。
假设40亿个数有四十亿种数。
步骤:
1、首先让40亿个数除以1千万,得到400
2、这40亿个数每一个数得到一个hash值然后让它模400,利用hash函数的性质让数据几乎均分的放到各自的hash槽中
3、hash函数的性质,同一种数字只会进入同一个文件
4、这样一来搞出了400个文件,每个文件数字的种数均分差不多一千万
5、然后则需要对0号文件使用hash表求出出现次数最多的数字,然后释放掉hash表,对1号文件使用hash表求出出现次数最多的数字,依次类推找出400个文件中出现次数最多的数字。

32位无符号整数的范围是0~4294967295,现在又一个正好包含40亿个无符号整数的文件,所以在正哥范围中必然存在没出现过的数,可以使用最多1GB的内存,怎么找到所有未出现的数?

应该使用位图来解决这类问题,定义一个bit数组那么我数组八位才占用一个字节,那么就准备2的32次方个长度的bit数组,那么一个才占用2的32次方除以八个字节,1G内存能解决当前问题,但是前提是bit数组,如何实现bit数组,拿基础类型去拼接。
当我申请一个长度为10的bit数组的时候,那么就等同于我申请了320长度的bit,具体第i号bit设置方式,用i除以32(知道i在arr中的哪个位置)然后再用i对32取模(看看是这个数字中的第几位)
解法:
准备好一个大位图,1G内存可以拿下,遍历整个文件,将数字在整个大位图上面将数字对应的位图表示做标记,最后找没被标记的则解决问题。

【进阶】内存限制为3KB,但是只用找到一个没出现过的数即可

3Kb的空间都拿来做无符号的整型数组的话,则数组最大长度为750(300/4),那么我最终申请512长度的空间,将2的32次方范围均分512份,每一份统计一个范围,就必然能找到不满的范围,则只需要在不满的小范围里面去找那个数字没出现就ok了,在小范围里面再将数字范围划分为512份,一直划分下去最终找到一个没出现的次数。
如果只能申请有限几个变量?
在这里插入图片描述
则可以通过2分的方式将数字范围逐渐划分变小,最终把没出现的数给2分找出来。

有一个包含100亿个URL的大文件,假设每个URL占用64B,请找出其中所有重复的URL

先把大文件通过hash函数分割成小文件(如果小文件再大则继续hash分流到更小的文件),再从这些小文件里面去找有没有重复的URL(hash有相同的输入一定有相同的输出)

32位无符号整数,现在有40亿个无符号整数,可以使用最多1GB的内存,找出所有出现了两次的数

用两bit位信息表示一个数的出现次数,就是找数对应的两位bit位就解决了(0,1两个bit位的数字表示数字0出现的次数),

现在有40亿个无符号整数,可以使用最多3K的内存,怎么找到10亿个整数的中位数(找上中位数)

1,2,3,4 中2就是上中位数。
只要3KB,取512长度的无符号整数数组,所以将整个范围分成512份,每一份都能均分,然后统计每个范围出现了多少个数,一共40亿个数要找第20亿个数出现在哪个范围,比如说第一个范围a只有1亿个数,那么可以排除中位数绝对不在范围a,如果某个范围区间刚到20亿或者刚超过20亿,那么这个上中位数一定在那个范围区间。
(分段统计思想)

有一个10G大小的文件,每一行都装着这种类型的数字,整个文件是无序的,给你5G的内存空间,请你输出一个10G大小的文件,就是原文件所有数字排序的结果

利用大根堆结构处理,维持了一个门槛,大根堆里面维护一个数字,然后再维护那个数字出现的次数,当新来的数大于大根堆的根节点时则弹出大根堆的头节点,然后让新的数字进来,当堆空间不满足5G的内存空间大小时,将堆中元素输出,再通过临时变量t记录当前堆中最大的节点是哪个,再重新遍历10G的文件跳过小于等于t的元素重新构建新的大根堆从而解决问题。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能讲师AIGC讲师叶梓:大模型这么火,我们在使用时应该关注些什么?-2

以下为叶老师讲义分享: P6-P9 一些考验大模型的经典问题: 1、鲁迅与周树人是同一个人吗?2、圆周率的最后一位3、蓝牙耳机坏了4、最新的:奶奶的睡前故事 关于事实的问答结果: 知识的时效性: 未完,下一章继续……

【Unity实战系列】Unity的下载安装以及汉化教程

君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,怎么说呢,其实这才是我以后真正想写想做的东西,虽然才刚开始,但好歹,我总算是启程了。今天要分享…

数据库活动监控(DAM)

在当今数据驱动的世界中,组织在保护存储在数据库中的机密数据并确保其完整性方面面临着越来越多的挑战。数据库审计通过提供全面的数据库活动监控方法,在应对这些挑战方面发挥着至关重要的作用。 数据库活动监控(Database Activity Monitori…

2023河南萌新联赛第(五)场:郑州轻工业大学-F 布鲁特佛斯

2023河南萌新联赛第(五)场:郑州轻工业大学-F 布鲁特佛斯 https://ac.nowcoder.com/acm/contest/62977/F 文章目录 2023河南萌新联赛第(五)场:郑州轻工业大学-F 布鲁特佛斯题意解题思路代码 题意 给定一个…

SpringCloudGateway配置跨域设置以及如何本地测试跨域

问题背景 有个服务A ,自身对外提供服务,几个系统的前端页面也在调用,使用springboot 2.6.8开发的,自身因为有前端直接调用已经配置了跨域。 现在有网关服务,一部分前端通过网关访问服务A(因为之前没有网关…

预测知识 | 预测技术流程及模型评价

预测知识 | 预测技术流程及模型评价 目录 预测知识 | 预测技术流程及模型评价技术流程模型评价参考资料 技术流程 1)模型训练阶段:预测因素和结局,再加上预测模型进行模型拟合; 2)预测阶段:将预测因素代入拟…

大数据课程I2——Kafka的架构

文章作者邮箱:yugongshiyesina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Kafka的架构; ⚪ 掌握Kafka的Topic与Partition; 一、Kafka核心概念及操作 1. producer生产者,可以是一个测试线程,也…

web-xss

目录 一、简介 二、xss的攻击方式 三、xss 常见标签语句 a标签 img标签 iframe标签 audio标签 video标签 svg标签 button标签 div标签 object标签 script标签 p标签 input标签 details标签 select标签 form标签 body标签 四、xss 常见绕过 编码绕过 1.htm…

(5)所有角色数据分析页面的构建-5

所有角色数据分析页面,包括一个时间轴柱状图、六个散点图、六个柱状图(每个属性角色的生命值/防御力/攻击力的max与min的对比)。 """绘图""" from pyecharts.charts import Timeline from find_type import FindType import pandas …

模仿火星科技 基于cesium+角度测量+高度测量+可编辑

1. 创建提示窗: 启动Cesium应用,地图场景将打开,欢迎您进入编辑模式。 在屏幕的一角,一个友好的提示窗将呈现,随着您的操作,它会为您提供有用的信息和指导。 2. 绘制面积: 轻轻点击鼠标左键&a…

iOS- git对单个或者多个文件权限设置,使用pre-commit hook 和shell脚本,拦截校验

前提:最近,由于团队代码规范和安全问题,有一些文件只能是指定用户才能修改。 对比:调查了一下资料,发现好多人都在使用pre-commit技术。于是,就朝着这个方向去研究。于是抽空写了脚本,在提交的…

【golang】数组和切片底层原理

数组类型的值(以下简称数组)的长度是固定的,而切片类型的值(以下简称切片)是可变长的。 数组的长度在声明它的时候就必须给定,并且之后不会再改变。可以说,数组的长度是其类型的一部分。比如&a…

【C语言】扫雷 小游戏

文章目录 一、游戏规则二、 代码逻辑三、游戏实现1. 游戏菜单设计2.设计雷区并随机布置雷(1) 设置雷区(2) 布置雷 3.排查雷 四、源码 一、游戏规则 1. 在9*9的小格子中,任意选取一个坐标(格子),选择后发现,如果没点中雷…

Substack 如何在去中心化内容创作领域掀起波澜

面对数字内容广告化的困境,Substack回归做内容的初心,通过产品和平台双轮驱动,重塑一个去中心化的多元文化内容聚集地,实现了增长突破。其核心策略在于先使用简洁的创作工具赋能内容生产,进而通过平台的互动机制促进用…

图像处理技巧形态学滤波之膨胀操作

1. 引言 欢迎回来,我的图像处理爱好者们!今天,让我们继续研究图像处理领域中的形态学计算。在本篇中,我们将重点介绍腐蚀操作的反向效果膨胀操作。 闲话少说,我们直接开始吧! 2. 膨胀操作原理 膨胀操作…

【JVM】JVM中的分代回收

文章目录 分代收集算法什么是分代分代收集算法-工作机制MinorGC、 Mixed GC 、 FullGC的区别是什么 分代收集算法 什么是分代 在java8时,堆被分为了两份: 新生代和老年代【1:2】 其中: 对于新生代,内部又被分为了三…

Object.assign详解

一、Object.assign是什么? Object.assign( )方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 二、用法 Object.assign(target, ...sources) 参数:target ——>目标对象 source ——>源对象 返回值:…

【springboot项目】在idea中启动报错合集

一、IDEA中报错 “Error running ‘Application‘: Command line is too long.“ 的解决办法 报错详情: Error running Application: Command line is too long.Shorten command line for Application or also for Spring Boot default configuration.报错原因&am…

Mybatis查询

返回实体类,必须指定返回类型, resultType不能省略,并且数据库字段名与实体类不一致会填充NULL,实体类我们一般都是驼峰,数据库字段一般都是下划线,所以在查询的时候可以起别名解决,属性填充本质上调用的是…

adb 命令行执行单元测试

文章目录 1、配置 adb 环境变量2、adb 执行测试3、官方文档解读 adb 使用(1)第一条执行测试的adb命令(2)am instrument 参数(3)-e 参数 的 key-value键值对(4)用法用例 4、存在问题 …