所謂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才輸出)效率
一、待處理的數是包含負數的整數時百度
加工一下,對全部的數字都減去最小值;而後就變成了非負數狀況。