Bloom Filter 系列改进之Multi-dimension Bloom Filter

来源:互联网 发布:开机启动 linux 编辑:程序博客网 时间:2024/06/01 07:16

    针对多维元素的表示和查询问题,目前存在一种多维布鲁姆过滤器(MDBF)解决方案。MDBF采用和元素维数相同的多个标准布鲁姆过滤器组成,直接将多维元素的表示和查询分解为单属性值子集合的表示查询,元素的维数有多少,就采用多少个标准的布鲁姆过滤器分别表示各自对应的属性。进行元素查询时,通过判断多维元素的各个属性值是否都在相应的标准布鲁姆过滤器中来判断元素是否属于集合。如下图所示。

    对于{n,m,k,L}的MDBF,判断元素是否从属集合,需要判断所有的属性值是否在对应的属性子集合,多维布鲁姆过滤器误判率为:

    多维布鲁姆过滤器查询时间为D(忌地),所需空间为D(m×L)。下面给出多维的例子:

    设二维元素为肛{A1,A2),其中A1和A2是2个不同的属性。使用MDBF需要2个标准布鲁姆过滤器BF1、BF2用来分别表示属性A1和属性A2。单属性域的布鲁姆过滤器向量都取胙=8 bit。每次映射和查找的散列函数的个数为2个,2个属性值映射的散列函数取一致,简单定义这2个散列函数为:h1(x)=x mod 8和h2(x)=(2x+3) mod 8。其中数据集合是{(9,7),(11,9)},需要查询的元素是(11,15)。表示集合之前,2个向量都需要初始化。元素(9,7)插入后,第一维布鲁姆过滤器向量BF1[1]和BF1[5]置位,第二维布鲁姆过滤器向量BF2[7]和BF2[1]置位,两向量状态分别如下图第2行所示。那么元素(11,9)插入后的向量状态如下图第3行所示。

    查询(11,15)是否在集合中。首先检查11是否在第一个属性集合中,11对应的2个散列地址3、1,发现BF1[3],BF1[1]都已置位,说明11在属性A集合中。然后检查15的2个散列地址,发现BF2[7],BF2[1]也已经置位,说明15也在属性A2的集合中,得出(1l,15)在集合中的错误结论。“MDBF出现误判的情况是每维都出现误判断时,元素才会被误判断”。通过上面的实例分析发现:实际上,MDBF算法在任何一维误判断时都会导致元素的误判断。如例2所示,两维元素(11,15)进行查询判断时,第二维15却不在第二维子集中,但是使用BF2误判断15在该子集中,此时就出现了两维元素由于一维的误判而导致元素整体的误判。成为MDBF的缺陷。
    上述结果的产生,是因为MDBF使用每个单独的BF来表示元素的每个单独的属性值,没有相应的结构将各属性值合成的元素表达出来。MDBF分割了各个属性值属于元素一体的特点,仅通过单独判断元素的各个属性值是否在对应的子集合来进行元素的从属判断,不可避免发生例2的情况,将不属于集合的元素(11,15)误判为属于集合,因此有必要对MDBF进行改进。

联合多维Bloom Filter

    考虑到如果能将各个属性合为一体的特性在布鲁姆过滤器中表示出来,得到元素的整体信息必然可以减少由于单维属性误判而导致的元素整体误判的可能性。由此提出改进的联合多维布鲁姆过滤器,它由两部分过滤器组成,第一部分是用标准布鲁姆过滤器表示的各属性子集,采用和MDBF一样的机制;第二部分是一个联合布鲁姆过滤器,用来表示各个属性值的联合。这里存在如何将元素表示到CBF的问题,如果MDBF每次映射散列地址范围一致,那么可以直接用不同属性域的对应散列映射地址进行异或运算,通过2次散列运算获得元素在CBF中的位置,将CBF对应位置置位,完成元素到cBF的表示。下面用一个例子来解释算法思路,如下图5所示,其中,圆圈中加一个加号为异或运算。

    重复上次的查询(11,15)是否是集合的元素。在多维bloom Filte的基础上,还需要进行元素整体是否在CBF的检查,元素(11,15)在CBF中的2个映射地址分为addrl=3异或7=4,addr2=1异或1=0。虽然CBF[4]=1,但是CBF[0]=0,得出元素(11,15)不在集合中的正确结论。虽然CMDBF算法只在MDBF算法上增加了一个用于表示各属性联合的CBF过滤器,但元素在CBF的映射位置由所有的属性值共同决定,有效解决由于单属性的误判断而造成元素整体误判断的可能。

    在误判率上,联合多维明显比之前的要好,不再证明。

参考文献:联合多维布鲁姆过滤器查询算法 谢鲲,秦拯,文吉刚,张大方,谢高岗 通信学报

0 0