大數據處理----位圖法

 

所謂bitmap,就是用每一位來存放某種狀態,適用於大規模數據,但數據狀態又不是不少的狀況。一般是用來判斷某個數據存不存在的(百度百科)。 數組

     例如:對{0, 1, 5,3, 7}進行排序,能夠在計算機中使用8位表示這幾個數,也就是使用一個字節空間能夠完成排序。大數據

      數組中的數:               0   1            3              5               7spa

      bitmap中的位值:      1    1    0     1      0     1      0       1     //若在數組中,則位值設爲1,不然爲0指針

      bitmap中的位標號:  0    1    2     3      4      5      6      7blog

 

  位圖法比 較適合於這種狀況,它的作法是按照集合中最大元素max建立一個長度爲max+1的新數組,而後再次掃描原數組,遇到幾就給新數組的第幾位置上1,如遇到 5就給新數組的第六個元素置1,這樣下次再遇到5想置位時發現新數組的第六個元素已是1了,這說明此次的數據確定和之前的數據存在着重複。這種給新數組 初始化時置零其後置一的作法相似於位圖的處理方法故稱位圖法。它的運算次數最壞的狀況爲2N。若是已知數組的最大值即能事先給新數組定長的話效率還能提升 一倍。排序

 

    位圖法是哈希法的一個特例。it

 

 

一、待處理的數是非負數時,class

void set_bit(char *bit_map, int n)  
{  
    bit_map[n/8] = bit_map[n/8] | (0x80>>n%8);  //_由於char指針一次移動只能是8bits
}  
  
bool find_bit(char *bit_map, int n)  
{  
   return bit_map[n/8] & (0x80>>n%8);    
} 

 大數據量排序:  將全部的待處理數據都set到位圖裏,而後遍歷一邊位圖按順序輸出便可(位爲1才輸出)效率

 

一、待處理的數是包含負數的整數時百度

加工一下,對全部的數字都減去最小值;而後就變成了非負數狀況。

相關文章
相關標籤/搜索