關於bitmap結構的大資料場景應用

2021-08-17 02:45:41 字數 1030 閱讀 3011

給定乙個檔案,裡面包含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億個整數中找出不重複的整數 注意,假設記憶體不足...