数据结构(如何在10亿数据中快速查找出重复的数据)

针对32位系统内存限制,通过位映射技术解决10亿数据的查重问题。创建一个长度为2的29次方的byte数组,根据数据对8取模和除法结果进行存储,降低数据占用空间。这种方法数组大小取决于最大值而非数据量,提高了处理效率。代码实现即将展示。
摘要由CSDN通过智能技术生成

       对于32位的计算机而言,只有2G的内存(2的三十一次方),而十亿大概是2的32次方。因此,不能将其直接放到内存中进行处理。 一个byte有八位,我们可以开辟长度为2的29次方的byte数组,利用位映射原理,将要处理的数对8进行除法取商,商作为byte数组的下标,数组存储的元素可以转化为八位二进制,若二进制数的第i位为一,则表示该数对8取模的值为i。如:

       假设某数据为9。9=8*1+1,即对8的商为1,对8取模为1。应该存在byte[1],将byte[1]的值改为00000002,即把2的一次方赋予byte[1]。

可以看到,新开数组的所需大小并不取决于数据量的大小,而是取决于某数据值的大小,新开的数组byte的大小N与所需处理的数据集之中的最大值Max有关,N>=Max/8。那么,先得到最大值,再进行查重可不可行呢,效率相对于直接开大空间有多大的提升呢?有待探究。

按照之前并不优雅的做法,就把数据量降低了n倍,得以对其进行各种操作。

下面上代码!

 

package SearchRepeatition;
/**
 * @author lzj lzj.997@qq.com:
 * @version 创建时间:2015-1-31 下午5:05:42 类说明 :10亿数量级的查重
 */
public class 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值