淺談BitMap

筱葭發表於2017-03-12

BitMap就是用一個bit位來標記某個元素對應的value,而key即是這個元素。由於採用bit為單位來儲存資料,因此在可以大大的節省儲存空間。

 

1) BitMap的演算法思想

32位機器上,一個整形int在記憶體中佔32bit,可以用對應的32個bit位來表示十進位制的0-31個數,BitMap演算法利用這種思想處理大量資料的排序與查詢。

 

2) BitMap的優點

① 效率高,不許進行比較和移位。

② 佔用記憶體少,如N=10000000;只需佔用記憶體為N/8 = 1250000Bytes = 1.2M,如果採用int陣列儲存,則需要1.2M * 32即38.4M。

 

3) BitMap的缺點

無法對存在重複的資料進行排序和查詢。

 

4) map對映表

假設需要排序或查詢的總數N,那麼需要申請的記憶體空間為int a[N/32 + 1]。

其中a[0]在記憶體中佔32位,依此類推,BitMap表為:

a[0] --> 0 - 31

a[1] --> 32 - 63

a[2] --> 64 - 95

......

 

5) 將十進位制數轉換為對應的bit位的位移轉換

① 求N對應的在陣列a中的下標:N / 32。

② 求N對應的bit位:N % 32。

③ 利用移位0-31使得對應的bit位為1。