大数据处理----位图法
所谓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、待处理的数是包含负数的整数时
加工一下,对所有的数字都减去最小值;然后就变成了非负数情况。

浙公网安备 33010602011771号