BitMap(比特位)

  所謂的Bit-map就是用一個bit位來標記某個元素對應的Value, 而Key便是該元素。因爲採用了Bit爲單位來存儲數據,所以在存儲空間方面,能夠大大節省。面試

  騰訊面試的時候,讓寫了一個BitMap,之前沒怎麼寫過,不知道如何去寫,當時只是知道哪一位置存在置爲1,不存在置爲0;腦殼一熱,居然去移位計算了,後來面試官給我說了這是錯誤的寫法,本身面試結束後,對BitMap這塊知識及時充電。數組

首先計算val屬於BitMap數組模塊的索引index = val / bitLen;spa

而後計算val所屬這個模塊的偏移量 pos = val % bitLen;code

這樣就能夠知道val在Bit圖中的位置;blog

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]);
    }
}
相關文章
相關標籤/搜索