码迷,mamicode.com
首页 > 其他好文 > 详细

如何在大量的数据中找出不重复的整数

时间:2020-06-10 21:18:33      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:空间   解答   重复   32bit   数据   如何   遍历   状态   相关   

题目描述:

在 2.5 亿个整数中找出不重复的整数。注意:内存不足以容纳这 2.5 亿个整数。

分析与解答:

由于这道题目与前面的题目类似,也是无法一次性把所有数据加载到内存中,因此也可以采用类似的方法求解。
方法一:分治法
采用 hash 函数的方法,把这 2.5 亿个整数划分到更小的文件中,从而保证每个文件的大小不超过可用的内存大小。然后对每个小文件而言,所有的数据都可以一次性被加载到内存中,因此可以使用 hash_map 或 hash_set 来找到每个小文件中不重复的整数。当处理完所有的文件后就可以找出这 2.5 亿个整数中所有的不重复的整数。
方法二:位图法
对于整数相关的算法的求解,位图法是一种非常实用的算法。对本题而言,如果可用的内存空间超过 1GB 就可以使用这种方法。具体思路:假设整数占用 4B(如果占用 8B,则求解思路类似,只不过需要占用更大的内存),也就是 32bit,可以表示的整数的个数为 232。由于本题只查找不重复的数,而不关心具体数字出现的次数,因此可以分别使用 2 个 bit 来表示各个数字的状态:用 00 表示这个数字没有出现过,01 表示出现过 1 次,10 表示出现了多次, 11 暂不使用。
根据上面的逻辑,在遍历这 2.5 亿个整数时,如果这个整数对应的位图中的位为 00,那么就修改成 01;如果为 01,则修改为 10;如果为 10,则保持原值不变。这样当所有数据遍历完成后,可以再遍历一遍位图,位图中值为 01 的 bit 对应的数字就是没有重复的数字。

如何在大量的数据中找出不重复的整数

标签:空间   解答   重复   32bit   数据   如何   遍历   状态   相关   

原文地址:https://www.cnblogs.com/hardy-wang/p/13072964.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!