所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。
腾讯面试的时候,让写了一个BitMap,以前没怎么写过,不知道如何去写,当时只是知道哪一位置存在置为1,不存在置为0;脑袋一热,竟然去移位计算了,后来面试官给我说了这是错误的写法,自己面试结束后,对BitMap这块知识及时充电。
首先计算val属于BitMap数组模块的索引index = val / bitLen;
然后计算val所属这个模块的偏移量 pos = val % bitLen;
这样就可以知道val在Bit图中的位置;
const int N = 10000; const int bitLen = (1 << 8); int arr[N+1] = {1}; int BitMap[1 + N/bitLen] = {0}; void SetVal(int val) { BitMap[1 + val >> 8] |= (1 << (val & 0xFF)); //计算val处于那个Bit块中的位置,将其置位1 } //检查是否存在val值 bool CheckVal(int val) { return BitMap[1 + val >> 8] & (1 << (val & 0xFF)); } //N个随机数的产生 void GetRand() { for(int i=1; i <= N; i++) arr[i]=i; int i, j; for(int k=0; k < N; k++) { i = (rand() * RAND_MAX + rand()) % N; j = (rand() * RAND_MAX + rand()) % N; swap(arr[i], arr[j]); } }