Files
Learn-Algorithms/91 Algorithms In Big Data/Bitmap.md
T

25 lines
993 B
Markdown
Raw Normal View History

2021-11-06 23:46:45 +08:00
# Bitmap
2017-03-21 11:46:19 +08:00
也就是用1个(或几个)bit位来标记某个元素对应的value(如果是1bitmap,就只能是元素是否存在;如果是x-bitmap,还可以是元素出现的次数等信息)。使用bit位来存储信息,在需要的存储空间方面可以大大节省。应用场景有:
2021-11-06 23:46:45 +08:00
1. 判断某个元素是否存在
2. 排序(如果是1-bitmap,就只能对无重复的数排序)
2017-03-21 11:46:19 +08:00
比如,某文件中有若干8位数字的电话号码,要求统计一共有多少个不同的电话号码?
2021-11-06 23:46:45 +08:00
分析:8位最多99 999 999, 如果1Byte表示1个号码是否存在,需要95MB空间,但是如果1bit表示1个号码是否存在,则只需要 95/8=12MB 的空间。这时,数字 `k(0~99 999 999)`与bit位的对应关系是:
2017-03-21 11:46:19 +08:00
```
#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))
```