位图算法与存在查找

本文详细介绍了通过位图算法优化查找40亿个不重复无符号整数中特定数值的过程,节省内存资源至512MB,并通过连续的无符号整形数组扩展计算范围,实现快速判断。

问题:40亿个不重复的无符整形(没排序),然后再给一个数,如何快速判断这个数是否在那40亿个数当中?


最笨的方法:40亿个不重复的无符整形,需要不到4G(40亿) * 4 = 16G的内存空间来存储所有的数,然后进行遍历。


位图算法就是利用,2进制位表示是否存在。0表示不存在,1表示存在。

一个32位的无符整形可以表示整数0~31是否存在。那么超过31的数怎么办了?

这里就需要一个连续的无符整形数组--uint[n],利用数组下标来扩展计算范围。

uint[0]表示0~31是否存在,uint[1]表示32~63是否存在。。。


那么只需要16G/32 = 512M内存来存储就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值