海量数据去重

法一:hash,通过哈希映射构建原始数据与hash值之间的关系。若哈希值相同则存在相同的数据,剔除即可。缺点:需要存储该数据与映射关系。

法二:bitmap,位图法,对于去重的问题,我们只需要标记该数据有没有出现过,并不需要去存储该数据。从这方面入手,便有了bitmap。 这里我们假设待处理的数据是int型数据,占32位。则数值区间为2^32,一共需要2^32位来标识所有的数值,那么我们只需要含有2^29个byte的byte数组来表示即可。使byte[0]表示最低的8位,依次类推,按顺序排列。数据13则对应byte[1]中第5位设置为1,8+5=13,表示13出现过。

法三:布隆过滤器,bitmap虽然好用,但是对于很多实际情况下的大数据处理它还是远远不够的,例如如果我们要进行64bit的long型数据去重,那我们需要含有2^61个byte的byte数组来存储,这显然是不现实的。布隆过滤器正是通过提高空间利用率来进行标记的。  它采用k个不同的散列函数来进行计算,将数值散列到k个不同的位置,然后将这些位置置为1。上图为例,k=3对于数值w他所对应的三个数值不全为1,所以判定其不在集合中。想到这里大家应该意识到了一个问题,如果一个数值v进行散列计算后位置落在3,4,5(从0开始计算),那么将判定该数据在当前集合中,这就产生了误判。会将不在集合中的数据误认为存在集合中,但是判定不在集合中的情况那将一定不在集合中。

è¿éåå¾çæè¿°

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值