bitmap算法 --位图算法

bitmap算法 --位图算法

位图不是像素图片,而是内存中连续的二进制位(bit),用于对大量整型数据做去重和查询

例题:给定一块10bit的内存空间,想要依次插入整型数4,2,1,3

解法:

10bit每一位的的值为0,当插入4时,此时下标 4 的位置,bit值置为1,剩下三个数类似。。。

应用:例:一个用户对应多个标签

解法:思路逆转。一个标签对应多个用户
1、建立用户名和用户ID的映射
2、让每一个标签存储包含次标签 的所有用户ID,每一个标签都是一个独立的BItmap
3、这样实现用户的去重和查询统计就一目了然

HashSet和HashMap同样可以实现用户去重,但是每一个用户ID都存成int,占4个字节,即32bit,而bitmap只占1个,内存节省了32倍。
并且,在用户做交集(且)、并集(或)的时候有极大的优势。
缺点:无法进行非运算,例如查找非90后用户。。。
需要有全量用户,然后使用异或,相同位为1,不同位为0

谷歌对bitmap做了优化的地方

bitmap存储于long数组中,long数组的每一个元素都可以当做是64位的二进制数,也就是整个bitmap的子集,谷歌把这些子集叫做word

word分为两种,直接存储数据的叫LW,存储跨度信息的叫RLW

1、当创建一个空的bitmap时,初始长度只有4个word,随着数据的不断插入,word数量会随之扩充
2、当插入的ID值很大时,采用RLW

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值