bitmap是一种简单的数据结构,但在存储空间压缩方面却使用广泛。
bitmap就是用一个bit位来标记某个元素是否存在:1表示存在,0表示不存在;而2-bitmap就是用两个bit为来标记某个元素出现的次数:00出现0次,01出现1次,10出现2次及其以上,11无意义。
2-bitmap在内存中的表示如下:
[0] [1] [2] ……
|00 00 00 00|00 00 00 00|00 00 00 00| ……
3 2 1 0 7 6 5 4 11 10 9 8 ……
任何一个可采用数组作为辅助标记来解决的问题都可以用bitmap来解决,因为用数组的每一个元素作为标记的话,用bit同样可以作为标记。当数据量比较小时,有时候为了操作方便,可直接采用数组。但当数据量很大的时候,因为内存大小的原因或题目限定了可用内存大小,数组就再没法解决我们的问题, 而此时bitmap就显示出其空间压缩的威力了:如果用char型的数组,标记同样范围内的数bitmap最多可以节省8倍空间,2-bitmap可节省4倍空间。若采用int型的数组,bitmap和2-bitmap可以分别最多节省32倍、16倍的空间。