关于bitmap:BitMap

47次阅读

共计 506 个字符,预计需要花费 2 分钟才能阅读完成。

根本思维
不同于应用 int(long 或 double 或 …)类型来存储某个元素,BitMap 采纳一个 bit 位来标记某个元素(bit 位的 value 为 1 示意该元素存在,此时该 bit 位的 index 即为该元素的值。)

算法

一个字节 byte 占用 8 个 bit 位,每个 bit 位的值为 0 或 1,0 代表该 bit 位没有元素存储,1 代表该 bit 位的元素存在(元素的值为该 bit 位的 index)。

问题

问题:给 40 亿个不反复的 unsigned int 的整数,没排序。再给一个数,疾速判断这个数是否存在 40 亿个整数中?内存限度 2G。

剖析过程
40 亿个无符号整数须要占用的内存空间 = 40 * 10^8 * 4 / 2^30 ≈ 14.9G,无奈全副加载到内存中应用传统的内存排序。
如果应用 BitMap,须要占用的内存空间 = 40 * 10^8 / 8 / 2^30 ≈ 477M大大节俭了存储空间

byte[]
index = n >> 3;
position = n & 7;

// add(n)
byte[index] |= 1 << position;

// clear(n)
byte[index] &= ~(1 << position);

// contain(n)
byte[index] & (1 << position) != 0 

正文完
 0