今天看到海量数据处理算法————bitmap(又称为bitset, 或者bit array), 有意思的算法。
C++ 有一个头文件是<bitset>。
bitmap的思想就是数据压缩。 用一个二进制bit(0或者1)去标记某个元素对应的value, 这就是bit + map啊。
由于使用bit单位存储数据, 所以可大大节省内存空间。下面举一个使用bitmap 的例子。
我们要对0-7内的五个元素进行排序, 假设这5个元素为(4, 7, 2, 5, 3)。 假设元素没有重复的。 要表示8个数, 我们需要8个bit。也就是1byte.
下面我们只需要开辟1byte的空间, 对这个1byte的所有的bit都初始化为0。
如下: 0000 0000
我们可以规定, 有如下的map。
0000 0000 ---> 0
0000 0010 ---> 1
0000 0100 ---> 2
0000 1000 ---> 3
0001 0000 ---> 4
0010 0000 ---> 5
0100 0000 ---> 6
1000 0000 ---> 7
以上的map是我们默认的, 不需要去另外开辟空间存这个映射表格(不过我们也可以吧index设为从1开始, 就有如下映射:
0000 0001 ----> 1
0000 0010 ----> 2