bit-map 算法用在海量数据处理中
http://blog.youkuaiyun.com/hguisu/article/details/7880288 已经写的非常清楚了
一般假设有N个整数,N非常大,装不进去内存中,所以用bit-map算法
N个整数,需要N位.一般需要N位来存储,大约需要N/8/1024/1024 MB
A[N/(sizeof(int)*8)]
大致意思和HASH有点类似
先分组,把整数分到一个小组中【0,31】分到A【0】小组中,【32,63】分到A【1】小组中......
一个整数总共32位,把【0,31】32个整数映射到每位中
#include <iostream>
using namespace std;
#include <cstdio>
#include <cstdlib>
#define SHIFT 5 // i >> 5 表示1/32
#define MASK 0x1F // 0x1F转换成十进制是31 i & 31 和 1%32 等同
#define BITSIZE 32
#define NUM 200
int a[NUM/BITSIZE];
// 使i对应的位设置为0
void clr(int i){
a[i>>SHIFT] &= ~(1<<(i&MASK));
}
void set(int i){
a[i>>SHIFT] |= (1<<(i&MASK));
}
bool test(int i){
return a[i>>SHIFT] & (1<<(i&MASK));
}
int main(){
int n;
for(int i = 0;i < NUM;i++){
clr(i);
}
while(cin >> n){
if(n == 0)
break;
set(n);
}
for(int i = 0;i < NUM;i++){
if(test(i))
cout << i << " ";
}
system("pause");
}
参考资料:http://blog.youkuaiyun.com/hguisu/article/details/7880288
http://hawstein.com/posts/12.3.html