BitMap(比特位)

  所谓的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]);
    }
}
原文地址:https://www.cnblogs.com/awy-blog/p/3977411.html