bitmap算法

本文参考:Bitmap 算法解释与应用

概念

BitMap 就是用一个 bit 位来标记某个key对应的 value。由于采用bit为单位来存储数据,因此在可以大大的节省存储空间。

使用场景

bitmap排序

假设我们要对5个不重复的数(4,7,2,5,3)排序。
确定最大值是7,数值范围是0~7,共8个数,需要8bit,即1字节。

此时8个字节与集合中的数的对应关系为:

  • 00010000 : 4
  • 10000000 : 7
  • 00000100 : 2
  • 00100000 : 5
  • 00001000 : 3

所以最终8个bit的结果为10111100,遍历这8bit,所以排序结果为(7,5,4,3,2)。

bitmap排序只有在数据比较密集的时候才会有有其优势,很多情况下并不适用。比如对(1,1000,10万)这种数据集排序就很不合适。

bitmap查找

找出10亿个数字中是否存在某个值

使用bitmap+布隆过滤器,布隆过滤器可以看笔者另一篇文章 布隆过滤器简介

bitmap去重

已知某个文件内包含很多电话号码,每个号码为8个数字,统计不同号码的个数。

8位最多99999999,占用100,000,000个bit,大小为12MB,这样用12M内存就表示来所有8位数的电话。

bitmap查重

10亿个整数中找出不重复的整数的个数,内存空间不足以同时容纳这10亿个整数。

将bitmap扩展一下,用2bit表示一个数即可,0表示未出现,1表示出现一次,2表示出现2次及以上。
在遍历这些数的时候,如果对应位置的值是0,则将其置为1;如果是1,将其置为2;如果是2,则保持不变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值