大数据处理----位图法

 

所谓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才输出)效率

 

一、待处理的数是包含负数的整数时百度

加工一下,对全部的数字都减去最小值;而后就变成了非负数状况。

相关文章
相关标签/搜索