refactor
This commit is contained in:
@@ -1,24 +0,0 @@
|
||||
|
||||
|
||||
## Bitmap
|
||||
|
||||
也就是用1个(或几个)bit位来标记某个元素对应的value(如果是1bitmap,就只能是元素是否存在;如果是x-bitmap,还可以是元素出现的次数等信息)。使用bit位来存储信息,在需要的存储空间方面可以大大节省。应用场景有:
|
||||
|
||||
|
||||
1. 排序(如果是1-bitmap,就只能对无重复的数排序)
|
||||
2. 判断某个元素是否存在
|
||||
|
||||
比如,某文件中有若干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))
|
||||
|
||||
```
|
||||
Reference in New Issue
Block a user