bitMap算法的分析

bitMap算法是一个bit位来标记某一个元素对应的value值,key是对应的元素,由于BitMap使用bit位来存储数据,大大节省存储空间。

给定一个10位的bitMap,里面的数字代表下标序号:

{4,5,6,,7}可以直观的看到

10

9

8

7

6

5

4

3

2

1

0

实际应用实例

id

sex

class

age

10001

male

one

19

10002

female

one

19

10003

female

second

20

 

让每一个维度属性生成一个BitMap

sex

bitMap(id)

male

10001

 female

10002,10003

 

class

bitMap(id)

second

10003

one

10001,10002

 

age

bitMap(id)

19

10001,10002

20

10003

可以从这三个对应的bitMap直观的看出对应的分布情况,实现用户的统计和查询就变得很简单了,性能也是比较高的。

与java中的hashset和hashtable也可实现这个效果,那么为什么就选择bitMap去实现那

Hashset和hashtable对应的用户的id存储的是int类型占4个字节【1个字节8个bit】

相当于占32bit,是bitmap的32倍,另外在处理交集和并集的时候有很大的便利。

另外有时候我们只需要求其中的一个属性的值:

例如求年龄是19岁的学生,两种方式一种是直接过滤出来一种如上面所生成的bitMap组合

第二种是进行非的处理,求非20岁的学生.

不能直接使用上面的结果去计算非20岁的学生个:

19岁的是两个

9

8

7

6

5

4

3

2

1

0

非19岁

9

8

7

6

5

4

3

2

1

0

按照这个计算此时的非20岁变成了8个,其实只有1个。不能直接进行非的运算

此时我们可以使用一个全量的和一个只有19岁的bitMap,我们可以通过全量的非去求非20岁的度量,使用异或的操作进行处理,及同位是0异位是1.

全量的:0000001110

19岁的:0000000110

非19的:0000001000

以上是bitMap的简单介绍和整理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值