所谓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才输出)效率
一、待处理的数是包含负数的整数时百度
加工一下,对全部的数字都减去最小值;而后就变成了非负数状况。