給定乙個檔案,裡面包含40億個整數,寫乙個演算法找出檔案中不包含的乙個整數,假設你有1gb的記憶體可以用。如果只有10mb 的記憶體呢?
解析:引出bitmap結構。
對於40億個整數,如果直接用int陣列來表示的話,需要40億*4*8b=40*10^8*4b=16gb,超出了記憶體要求。
這裡我們使用bitmap結構去解決。
bitmap的主要思想是一bit位表示乙個整數,比如1個byte有8位,那麼每一位表示乙個數的話,就可以表示8個數,那麼乙個int型別,4個位元組,32位就能表示32個數。本來表示32個整數需要32個int,則32*4=128個位元組,現在表示32個位元組只需1個int型別即可。
那麼如題,40億個整數需要40*10^8=40*10^8 bit=0.5gb, 這樣是滿足題目的要求的。
舉例,我們現在用乙個長度為1000的int型陣列。比如我要存30000,首先計算它在第多少個int中,再計算它會落到該int32位的哪一位中?分別30000/32,30000%32得到intindex和bitindex。
arr[ intindex
]=arr
[ intindex
] | (1<<
bitindex
);//將30000放到相應的bit位上了;
那麼如何判斷是否存在呢?
arr [
intindex
]&(1<<
bitindex
)//如果結果為0,則不存在,否則存在
public
class
test_bitmap
}
大資料處理 Bitmap
mapreduce是一種程式設計模型,用於大規模資料集 大於1tb 的並行運算。概念 map 對映 和 reduce 歸約 bit map空間壓縮和快速排序去重 1.bit map的基本思想 32位機器上,對於乙個整型數,比如int a 1 在記憶體中佔32bit位,這是為了方便計算機的運算。但是對...
資料結構 BitMap
問題 已知有n個整數,這些整數的範圍是 0,100 請你設計一種資料結構,使用陣列儲存這些資料,並提供兩種方法,分別是addmember和i ist.下面是這種資料結構的類的定義。思路1 用陣列儲存,查詢是否存在需要for迴圈n,有n個數那麼複雜度為o n 思路2 用陣列儲存,新增資料則arr in...
Bit map法處理大資料問題
問題引入 1.給40億個不重複的unsigned int的整數,沒排過序的,然後再給乙個數,如何快速判斷這個數是否在那40億個數當中?2.給定乙個千萬級別資料量的整數集合,判斷哪些是重複元素。3.給定乙個千萬級別資料量的整形陣列,對其進行排序。4.在5億個整數中找出不重複的整數 注意,假設記憶體不足...