bitmap ?排序
----10g檔案的自然數,亂序排列,在32機器中限制為2g記憶體進行排序。(x86機器採用的是小端儲存模式),即小端模式:資料的高位儲存在位址的高位位址,資料的地位儲存位址的地位位址上。
數字按照bit 位進行儲存,儲存的bit 的值 置位 為 1.
如: 2,7,5,1,4 五位數字進行排序,
->byte 8bit: 0000 0000
對應的bit數存相應的值。
->byte 8bit: 1011 0110
然後直接按照資料讀取bit的數字即可。 1,2,4,5,7 。順序即可完成排序。
再看下10g的檔案,乙個自然數站4bytes,
即乙個int型別,count= 10*1024*1024*1024 /4 bytes 自然數 2684354560個
如果這些數字使用bit為儲存時需要
2684354560 / 8*1024*1024=320m .發現只需要320m的空間即可儲存。
2g 的空間還是非常多的。
----如何做?
bitmap 排序要點,會去重。
1、 使用int 進行儲存。int 佔 4byte = 32bit 。首先要確認int 的陣列大小。使用給定排序值的最大值進行。
int index = maxsortvalue >> 5
2、 確定偏移量
int offset = maxsortvalue & 31 確定偏移量,也可以是 maxsortvalue % 32
3、setbit方法
public static void setbit(int value)
4、設定getflag 方法
public static int getflag(int value)
演算法 bitmap演算法
所謂bitmap就是用乙個bit位來標記某個元素對應的value,而key即是這個元素。由於採用bit為單位來儲存資料,因此在可以大大的節省儲存空間 32位機器上,乙個整形,比如int a 在記憶體中佔32bit,可以用對應的32個bit位來表示十進位制的0 31個數,bitmap演算法利用這種思想...
演算法 bitmap演算法
在所有具有效能優化的資料結構中,我想大家使用最多的就是hash表,是的,在具有定位查詢上具有o 1 的常量時間。但hash table需要使用巨大的記憶體空間,顯然在處理大資料時會顯得力不從心。bitmap可以有效地節省記憶體的使用,它的思想其實就是用1bit來代替乙個index 通常是乙個unsi...
排序之bitmap排序
所謂的bit map就是用乙個bit位來標記某個元素對應的value,而key即是該元素。由於採用了bit為單位來儲存資料,因此在 儲存空間 方面,可以大大節省。如果說了這麼多還沒明白什麼是bit map,那麼我們來看乙個具體的例子,假設我們要對0 7內的5個元素 4,7,2,5,3 排序 這裡假設...