只用2GB内存,在20亿个整数中找到出现次数最多的数

本文探讨了在有限内存条件下,如何从一个包含20亿个32位整数的大文件中找出出现次数最多的数。通过将大文件hash成20个小文件,逐个加载并统计各整数出现频率,最终汇总找到全局top1。

题目:

        有一个包含20亿个全是32位整数的大文件,在其中找到出现次数最多的数。限制内存只有2GB。

解法:

        32位bit,占用4Byte,20亿,就是8GB大小。2GB内存,很明显,我们无法直接加载到内存。

所以继续是分而治之的思路,我们可以把这个大文件,hash成20个小文件,这样每个文件,加载到内存,只需要400mb。

我们可以先后加载每个小文件,计算统计里面每个整数的出现次数。最后只去top 1.

          所有小文件都统计计算完成后,汇总,找到top 1.

用C++解决一下问题,要求保证代码正确,要求有: 1.时限为1s,请保证时间复杂度 2.运行通过给定的所有样例据,如果不通过请自行调试代码直至通过 3.尽量使用scanf/printf,除非为string类型等可以使用cin/cout 4.少用STL,尽量用组代替,除非必须使用或者使用后代码明显简洁 5.下标尽量从1开始 6.变量名简短,不超过2个字符 7.代码中不含注释 8.如果据为好几组,需要用if特判一下每组处理,不可以忽略任意一组 9.使用万能头文件 下面给出题目,请一定要保证代码正确再给我!!! 题目描述 有驯鹿和一个雪橇。第 $i$ 头驯鹿的重量为 $W_i$ ,强度为 $P_i$ 对于每只驯鹿,选择“拉雪橇”或“骑雪橇”,在这里,拉雪橇的驯鹿的总强度必须大于或等于骑在雪橇上的驯鹿的总重量。雪橇上最多能坐多少头驯鹿? 您将得到 $T$ 个测试用例,每个都解出来 输入格式 第一行一个 $T$ 下面有 $T$ 组据,每组格式如下 第一行一个整数 $N$,下面 $N$ 行每行两个 $W_i,P_i$ 输出格式 对于每组据,输出一行一个表示答案 样例 输入1 3 3 3 1 4 1 5 9 5 1000000000 1 1000000000 1 1000000000 1 1000000000 1 1000000000 1 10 133180711 458704923 531424946 225863856 141986070 637075158 500770732 289806469 502866767 408857335 559714289 569084545 287444582 992432993 559747907 753133304 432846188 949871298 727072164 756020367 输出1 2 0 6 据范围 ·1≤T≤100000 ·1≤N≤300000 ·1≤W_i,P_i≤1000000000
最新发布
12-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉丁解牛说技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值