[算法]bitmap算法

  在所有具有性能优化的数据结构中,我想大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间。但hash table需要使用巨大的内存空间,显然在处理大数据时会显得力不从心。

  bitmap可以有效地节省内存的使用,它的思想其实就是用1bit来代替一个index(通常是一个unsigned int)。

 比如我要对{1,5,7,2}这四个byte类型的数字做排序,该怎么做呢?我们知道byte是占8个bit位,其实我们可以将数组中的值作为bit位的key,value用”0,1“来标识该key是否出现过?下面看图:从图中我们精彩的看到,我们的数组值都已经作为byte中的key了,最后我只要遍历对应的bit位是否为1就可以了,那么自然就成有序数组了。 
                
可能有人说,我增加一个13怎么办?很简单,一个字节可以存放8个数,那我只要两个byte就可以解决问题了。
(摘自:http://www.cnblogs.com/huangxincheng/archive/2012/12/06/2804756.html)
 
利用位操作,不难写出bitmap的置位、复位、判断、取反等操作。
置位:1左移i位与其相或
复位:1左移i位求反后与其相与
取反:1左移i位与其异或
 
因此,使用几个字节的bitmap作为hash table可以节省大量内存。
posted @ 2013-03-30 16:35  iyjhabc  阅读(198)  评论(0编辑  收藏  举报