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

 

所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的(百度百科)。 

     例如:对{0, 1, 5,3, 7}进行排序,可以在计算机中使用8位表示这几个数,也就是使用一个字节空间可以完成排序。

      数组中的数:               0   1            3              5               7

      bitmap中的位值:      1    1    0     1      0     1      0       1     //若在数组中,则位值设为1,否则为0

      bitmap中的位标号:  0    1    2     3      4      5      6      7

 

  位图法比 较适合于这种情况,它的做法是按照集合中最大元素max创建一个长度为max+1的新数组,然后再次扫描原数组,遇到几就给新数组的第几位置上1,如遇到 5就给新数组的第六个元素置1,这样下次再遇到5想置位时发现新数组的第六个元素已经是1了,这说明这次的数据肯定和以前的数据存在着重复。这种给新数组 初始化时置零其后置一的做法类似于位图的处理方法故称位图法。它的运算次数最坏的情况为2N。如果已知数组的最大值即能事先给新数组定长的话效率还能提高 一倍。

 

    位图法是哈希法的一个特例。

 

 

1、待处理的数是非负数时,

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才输出)

 

1、待处理的数是包含负数的整数时

加工一下,对所有的数字都减去最小值;然后就变成了非负数情况。

 

posted @ 2014-10-13 15:51  月十日十  Views(855)  Comments(0)    收藏  举报