針對海量的資料,一般的記憶體無法儲存,提供一種位儲存的標記方法?
如給定10億個數字,詢問其中任意乙個數字是否出現,採取傳統的儲存方式,以32位機器為例
乙個int占用32位,也就是4位元組
而bitmap的思想是,無符號int型別的範圍是確定的 即0~2的32次方-1
那麼將乙個int拆分開來看,其包含32個bit 若其中乙個bit為1那麼標記原先的數字存在 那麼對於一組int
第乙個int: 表示0~31這32個數字
第二個int: 表示32~63這32個數字
對於任意乙個整數key
key/32可以定位到所在的int (那麼這裡乙個int相當於乙個bucket桶)
key%32可以定位到具體在該int的哪一位
具體實現採取位操作:
set(key)標記乙個key數字存在 將對應bit設定為1 注意採取按位或 避免其他位置的bit唄修改
void set(int key) //設定key數字為true 找到對應所在的bit下標
reset(key)刪除乙個key 將對於bit設定為0
void reset(int key) //刪除key數字
exits判斷某個數是否存在
bool exist(int key)
完整bitmap類的實現:
class bitmap
void set(int key) //設定key數字為true 找到對應所在的bit下標
void reset(int key) //刪除key數字
bool exist(int key)
};
海量資料儲存 bit map思想
什麼是bit map 所謂的bit map就是用乙個bit位來標記某個元素對應的value,而key即是該元素。由於採用了bit為單位來儲存資料,因此在儲存空間方面,可以大大節省。如果說了這麼多還沒明白什麼是bit map,那麼我們來看乙個具體的例子,假設我們要對0 7內的5個元素 4,7,2,5,...
bitmap處理海量資料
什麼是bit map 所謂的bit map就是用乙個bit位來標記某個元素對應的value,而key即是該元素。由於採用了bit為單位來儲存資料,因此在儲存空間方面,可以大大節省。如果說了這麼多還沒明白什麼是bit map,那麼我們來看乙個具體的例子,假設我們要對0 7內的5個元素 4,7,2,5,...
bit map海量資料處理
海量資料排序問題 檔案包含1千萬條 號碼記錄 10 7次方 每條記錄都是7位整數,沒有重複的整數。要求對檔案進行排序,注意大約只有1mb的記憶體空間可用,有充足的磁碟儲存空間可用。請設計乙個高效的演算法。1 運用多趟演算法 如果每個號碼都使用32位整數來表示,則在1mb儲存空間裡大約可以存25000...