演算法 BitMap 排序 索引

2021-10-01 05:53:41 字數 1128 閱讀 2046

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 排序 這裡假設...