【算法篇】Bitmap 算法

Posted on 2017-09-07 14:16  杨心漂  阅读(243)  评论(0编辑  收藏  举报

 

 

首先,什么是Bitmap算法(位图算法)呢?

一:定义:

      Bit map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。使用Bit为用来存储数据的单位, 可以大大节省存储空间

 

       在32位机器上, int a 在内存中占32 位,可以用对应的32bit 对应十进制的0-31个数,bitmap就是应用此思想对大量整型数据来进行去重,排序与查询。

       举个例子:

给定了一块长度为8 bit的内存空间,依次插入6,2,7,1,那么

 

                    给定长度为8的bitmap,每个位对应0到7八个整数型。此时bitmap中所有位均是0.

       

               7          6           5           4          3            2          1          0 

                  将整数6存进去,对应下标为6,将bit置为1

        

               7          6           5           4          3            2          1          0 

 

                     同理,依次将2,7,1存进去,bit都置为1

     

                7          6           5           4          3            2          1          0 

        

             7          6           5           4          3            2          1          0 

        

          7          6           5           4          3            2          1          0 

 

  所以Bitmap方便查询,还可以去除重复的整数型。

二:应用:

      例如,我们要调查使用该软件的用户群体,统计的内容有男女比例,各婚姻状况的用户数量,性别,职业等等很多项,那需要怎么做呢 罒ω罒。。。。

  首先我们可能想到:利用MySQL建立一个表,每一列代表一个用户标签。利用SQL语句就可以轻松的求交集或并集了。。但是!问题来了!!

我们需要统计的越来越多。。表格越来越大,及其不易管理,SQL语句也变得十分复杂。。。。。

       这个时候。。

       Bitmap算法闪亮登场೭(˵¯ꇴ¯˵)౨

将用户以Bitmap形式存起来,用一个调查项对应多个用户即可:建立用户名与用户ID的一一映射,每一个调查项包含符合条件的所有用户ID。

  可是,为什么不用HashMap呢。。。。。因为每个用户ID需占用int四个字节,32bit,消耗的空间大大增加了。

三:优缺点:

优点:           1.如上文所说,占用内存少

                     2.效率高,不能进行比较和移位

缺点:           1.无法对存在重复的数据进行排序和查找

                     2.无法求‘非’

 

四:思考

  在一个很长的Bitmap中仅仅有少量用户,浪费空间怎么办?

  

  

 

 

---恢复内容结束---