欢迎来到天天文库
浏览记录
ID:33928603
大小:563.79 KB
页数:10页
时间:2019-02-28
《海量数据处理算法—bit-map》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、本文由西安白癜风专科医院http://www.xapfb120.com/收集,转载请注明出处海量数据处理算法—Bit-Map1.BitMap算法简介来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。2、BitMap的基本思想我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。那么我们就可以采用Bit-map的方法来达到排序的目的。要表示8个数,我们就只需要8个Bit(1Bytes),首先我们开辟1Byt
2、e的空间,将这些空间的所有Bit位都置为0,如下图:然后遍历这5个元素,首先第一个元素是4,那么就把4对应的位置为1(可以这样操作p+(i/8)
3、(0x01<<(i%8))当然了这里的操作涉及到Big-ending和Little-ending的情况,这里默认为Big-ending),因为是从零开始的,所以要把第五位置为一(如下图):然后再处理第二个元素7,将第八位置为1,,接着再处理第三个元素,一直到最后处理完所本文由西安白癜风专科医院http://www.xapfb120.com/收集,转载请注明出处本文由西安白癜风专科医院http://www.xapfb120.com/收集,转载请注
4、明出处有的元素,将相应的位置为1,这时候的内存的Bit位的状态如下:然后我们现在遍历一遍Bit区域,将该位是一的位的编号输出(2,3,4,5,7),这样就达到了排序的目的。优点:1.运算效率高,不许进行比较和移位;2.占用内存少,比如N=10000000;只需占用内存为N/8=1250000Byte=1.25M。缺点:所有的数据不能重复。即不可对重复的数据进行排序和查找。算法思想比较简单,但关键是如何确定十进制的数映射到二进制bit位的map图。3、Map映射表假设需要排序或者查找的总数N=10000000,那么我们需要申请内存空间的大小为inta[1+N/32],其中:a[0]在内存中
5、占32为可以对应十进制数0-31,依次类推:bitmap表为:a[0]--------->0-31a[1]--------->32-63a[2]--------->64-95a[3]--------->96-127本文由西安白癜风专科医院http://www.xapfb120.com/收集,转载请注明出处本文由西安白癜风专科医院http://www.xapfb120.com/收集,转载请注明出处..........那么十进制数如何转换为对应的bit位,下面介绍用位移将十进制数转换为对应的bit位。3、位移转换申请一个int一维数组,那么可以当作为列为32位的二维数组,
6、32位
7、inta[
8、0]
9、0000000000000000000000000000000000000
10、inta[1]
11、0000000000000000000000000000000000000
12、………………inta[N]
13、0000000000000000000000000000000000000
14、例如十进制0,对应在a[0]所占的bit为中的第一位:000000000000000000000000000000010-31:对应在a[0]中i=000000000000000000000000000000000temp=000000000000000000000000000000000answer=100000
15、000000000000000000000000001i=100000000000000000000000000000001temp=100000000000000000000000000000001answer=200000000000000000000000000000010i=200000000000000000000000000000010temp=200000000000000000000000000000010answer=400000000000000000000000000000100本文由西安白癜风专科医院http://www.xapfb120.com/收集,转载请注明
16、出处本文由西安白癜风专科医院http://www.xapfb120.com/收集,转载请注明出处i=3000000000000000000000000000011110temp=3000000000000000000000000000011110answer=107374182401000000000000000000000000000000i=3100000000000000000000000000011111temp=31000
此文档下载收益归作者所有