002 bitmap海量数据的快速查找和去重

在有限内存条件下,面对40亿个整数,通过使用Bitmap数据结构进行优化,可以有效地进行数据存储、查找和去重。Bitmap利用一位代表一个整数,将40亿个数据压缩至0.5GB,满足内存需求。插入和查询操作通过计算索引和位运算完成。此外,通过分块计数器方法可进一步找出文件中未包含的数字,实现数据去重。
摘要由CSDN通过智能技术生成

题目描述

给你一个文件,里面包含40亿个整数,写一个算法找出该文件中不包含的一个整数, 假设你有1GB内存可用。

如果你只有10MB的内存呢?

对于40亿个整数,如果直接用int数组来表示的大约要用40*10^8*4B=16GB,超出了内存要求,这里

我们可以用bitmap来解决,bitmap基本思想是一位表示一个整数,比如我们有6个数据:

7   3  1  5  6  4 

假设bitmap容量为8,当插入7时 bit[7]=1,一次类推

bit[3]=1

bit[1]=1

bit[5]=1

......

bit[4]=1

这样我们查询5,只需要查看bit[5]==1侧存在,否则不存在。

这样一个位代表一个数据,那40一个数据大概要40*10^8*bit = 0.5GB,满足内存要求。

首先我们用int来表示:int  bmap[1+N/32]; //N是总数,N=40亿,一个int32bit

然后我们插入一个整数val,要先计算val位于数组bmap中的索引:index = val/32;

比如整数33,index=33/32=1,第33位于数组中的index=1

比如整数67,index=67/32=2,位于数组中index=2

然后在计算在这个index中的位置,因为数组中的每个元素有32位

33,index=1,在1中的位置为33%32=1

67,index&#

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值