Skip to content

Latest commit

 

History

History
24 lines (14 loc) · 993 Bytes

File metadata and controls

24 lines (14 loc) · 993 Bytes

Bitmap

也就是用1个(或几个)bit位来标记某个元素对应的value(如果是1bitmap,就只能是元素是否存在;如果是x-bitmap,还可以是元素出现的次数等信息)。使用bit位来存储信息,在需要的存储空间方面可以大大节省。应用场景有:

  1. 判断某个元素是否存在
  2. 排序(如果是1-bitmap,就只能对无重复的数排序)

比如,某文件中有若干8位数字的电话号码,要求统计一共有多少个不同的电话号码?

分析:8位最多99 999 999, 如果1Byte表示1个号码是否存在,需要95MB空间,但是如果1bit表示1个号码是否存在,则只需要 95/8=12MB 的空间。这时,数字 k(0~99 999 999)与bit位的对应关系是:

#define SIZE 15*1024*1024
char a[SIZE];
memset(a,0,SIZE);

// a[k/8]这个字节中的 `k%8` 位命中,置为1
// 这里要注意 big-endian 和  little-endian的问题 ,假设这里是big-endian
a[k/8] = a[k/8] | (0x01 << (k%8))