BitMap 算法基本描述

BitMap 是使用 bit位来标记某个元素对应的value,而key 即是该元素,因此对于之前位数存储换成bit位存储数据能大大的节省存储空间。

下面简单介绍一下bitmap的实现思想:

假设我们要对于0-7内的5个元素(4,7,2,5,3)进行排序(假设元素没有重复),我们可以利用bitmap达到该目的,要表示8个数,我们需要8byte,每个byte相当于一个标志位,我们可以通过标志位(0,1)去标识本次这个元素是否存在(0,标识不存在)或者不存在(1,标识存在),这样对于4,7,2,5,3,按照标识位我们就可以表示成如下:

0 0 1 1 1 1 0 1

 对于从左到右,我们依次取出标志位为1的对应的value即 进行了一次从小到大的排列,那么这么去运用bitmap算法有什么好处呢?

bitmap的一个巨大的好处就是高性能,下面就这一好处做详细说明:

  如果对于一个int型数组{1,2,4,6},大概占的内存空间为4*4 = 16byte,但是,对于如今大数据时代来说,各种数据零零散散,假如要对于10亿这种数据进行处理呢?10亿*4/1024/1024/1024=4个G左右,要是物理机内存不够,要对这样大量的一个数据进行处理的话,内存说不定就崩溃了。如果分批进行处理,那么存盘的I/O消耗也比较高,如今飞速发展的时代,我们需要能高效的处理,这就引入了bitmap算法进行处理,以达到高性能的要求,按照10亿的例子处理如下:

对于一个字节来说,1byte = 8bit,我们把bit当做标志位去与10亿数据进行key 和 value的映射,这个标志位可以是该数据的某个属性,如上述排序中的存在或者不存在等情况,通过标志位来确定一一对应的关系,这样对于10亿数据,最后占得内存空间变成了4G/8/4=125M左右了,这样大大的节省了cpu的负荷,具体实现如下:

  

依次进行一一映射,这样处理起来就将原来的内存空间大大节省,提高了处理效率;

如此关于bitmap算法的具体描述就介绍到这里,后续有兴趣可以查查bitmap算法的具体代码实现和应用,届时再做分享记录~

猜你喜欢

转载自www.cnblogs.com/cvest/p/9560448.html
今日推荐