一种可扩充型Bloom Filter方法技术

技术编号:6856470 阅读:285 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种可扩充型布隆过滤算法,将位向量集合A拆分成几个独立的小的位元集合。一旦其中某一个小的位元集合达到了它所能容纳元素的极限,就立即生成一个新的位元集合,则新的位元集合就会处理新加入的元素。这样就不需要重新构造位向量集合A并重新进行元素的置位操作。使用这种方法可在硬件的存储空间有限的情况下,有效的利用空间,并降低误报率。

【技术实现步骤摘要】

本专利技术涉及一种针对动态增长数据集合的可扩充型Bloom Filter方法,属于计算机

技术介绍
在计算机程序设计中,时常会遇到判断某元素是否在给定的集合中;判断垃圾邮件地址是否在黑白名单中;网络爬虫(Crawler)的网址判重;文字处理的拼写检查。遇到这些问题时,最简单也最直接的方法就是普通查找,即遍历。即将这个集合中的全部元素存储在计算机中,当要查询一个新元素时,就将它和计算机中的这些元素进行比较。这种方法简单直接,但效率极低,通常查找的效率会随着元素规模的增加而不断的降低,数据规模越大效果越差;使用哈希(Hash)表的方法能够快速的查找到相应的元素,而且准确率较高,但是对存储空间要求高。当集合较大时,哈希表存储效率低的问题就显现出来了。因此需要寻求一种能在使用较少存储空间条件下,使用较短的查找时间就可以准确的找到所需数据元素的方法。布隆过滤器(Bloom filter, BF)是由巴顿·布隆于一九七零年提出的。它出一种空间效率极高的概率型数据结构,能在很短的时间内判断出某数据是否属于给定的集合。布隆过滤器,是一个很长的二进制向量和一系列随机映射函数。只需要使用哈希表的1/8到1/4的空间复杂度就能完成同样的问题。布隆过滤器随着插入元素的不断增加, 其误报率(false positive rate),但是漏报(false negative)的情况是不存在的。空的布隆过滤器是由一个长度为m位的位元向量构成,初始化时m个位元位置都置为O。并且构造k个相互独立且互异的哈希函数(hash function),其中每个函数都能将待查找的元素映射到m个位元中的某一个位置上,如图1所示。现给定的集合中有元素 , ,a3,使用k个Hash函数建立 , ,a3与位数组V的映射关系,并将相应的位置置为1,如图2所示。要判断元素1^ 是否在上述的集合中,可以使用相同的哈希函数进行计算,假设映射关系如图3所示。通过对比图2和图3位元为1的位置,分析可知元素、经哈希函数运算后对应的位置都已置为了 1,则可以判定元素、在一定的误报率下在给定的集合中;而元素Id2经映射后的位置在图3中并没有被全部置为1,可以判定元素Id2 —定不在给定的集合中。现有的布隆过滤器有很多局限性,其中之一就是它只是针对静态数据集。比如将要处理一些目标集合时不知道要处理数据的规模大小;或者出现了另一种情况就是要处理大量的数据,但加入到这个集合中的元素速度却非常缓慢。当加入元素的数量不断的增加时,查找的误差率会不断的增大,最终这个BF将不可用。
技术实现思路
本专利技术的目的在于提出一种针对动态增长数据集合的可扩充型Bloom Filter方法。为了实现专利技术目的,采用以下技术方案,具体步骤如下步骤Al,向量集合A中的η个位元,拆分成s组较小的相互独立的段。假设每段都有相同的位元个数!位;接着建立一个新的Hash函数Cs(X) (1彡Cs(X)彡s),它的作用S就是确定是哪组位元参与了计算。对于集合T= Itpt2, ···&},这个集合可动态的增加元素,它和普通的BF相同,可扩充型布隆过滤器用k个Hash函数Ci (χ),1彡i彡k。与前一种算法的区别就是Vxe7 )e{U,‘‘‘,,则^⑴就是在某段中偏移量哈希函数。>步骤A2,一个元素加入到EBF中;在加入新元素之前,先判断Cs(X)段是否已满,即是否已达到可处理数据的极限,即是否在允许的误报率范围之内;若超出了这η个范围,则创建一个大小为一的新段,这个段的段序号仍然记做Cs(X);然后通过公式SdC^xf + AOOX/SA:将新加入进去的元素映射到新创建的段中;若该段没有满,则用S上述公式计算,直接将计算所得的位元位置置1。步骤A3,判断新加入的元素是否在特定的集合中;对于加入的元素X,首先计算Cs(X),然后检索所有段号为Cs(X)的段的第Ci(X)位置,若如果其中的一个段中所有Ci(X)位置的位元都是1,则就称在一定的误报率下该元素属于集合T ;反之,则χ不是集合T中的元素。所述的可扩充型Bloom Filter方法,所述步骤A2执行以下步骤A21、首先,判断已有的位元集合CsUi)是否还能容纳新的元素,即计算mskpEBF — n Ji 若ρ^7大于允许的误报率,则跳到A23 ;否则继续;A22、计算、的哈希值Ci (、),并根据哈希值将其映射至位第Cs (、)段的位置上,即将Cs (、)的位置的位元置1,元素、插入完成,算法结束;A23、创建一个大小为的段,段序号仍记做Cs (、),并根据哈希值将其映射至新S生成的段上,即将新生成段Cs(ti)的第Ci(ti)个位元置为1,元素、在扩展的段中插入,算法结束O所述的可扩充型Bloom Filter方法,所述步骤A3执行以下步骤A31、计算Cs(X)值,在位元空间中查找所有段号为Cs(X)的段;A32、计算Ci(X)值,遍历段号为cs (χ)的段的第Ci(X)位置的值;Α33、在所有段号为Cs(X)的集合中,当且仅当存在某一段号为cs (χ)中所有Ci (χ) 位置位元值为1,则元素χ属于集合T ;否则,在所有段号为Cs(X)的集合中都找不到某段所有Ci(X)位置都为1的位元段,则可以判定在一定误报率下,元素χ不是集合T中的元素。Α34、查找算法结束。这种方法能够在较低的误报率下,使用较少的存储空间来适应数据集中数据动态增长问题。本专利技术提出了分割并增向量空间的方式表示数据集合的可扩充型布隆过滤器 EBF,在事先不知道数据规模的系统集合中,能够有效的缓解数据增加而导致的误报率上升的问题,并且可以节省判定时间和存储空间。附图说明图1为初始化位数组,图中所有位置零;图2为经哈希函数映射后的置位状态;图3为根据哈希函数进行查找的示意图;图4为元素插入流程图;图5为EBF插入元素、示意图;图6为判断元素是否在集合中的流程图;图7为EBF效果,7-1为P:和户^^^“误报率比值比较;7_2可容纳元素比值比较。具体实施例方式本专利技术提供一种可扩充型布隆过滤算法,将位向量集合A拆分成几个独立的小的位元集合。一旦其中某一个小的位元集合达到了它所能容纳元素的极限,就立即生成一个新的位元集合,则新的位元集合就会处理新加入的元素。这样就不需要重新构造位向量集合A并重新进行元素的置为操作。使用这种方法可在硬件的存储空间有限的情况下,有效的利用空间,并降低误报率。具体步骤如下步骤一,将位向量集合A中的η个位元,拆分成s组较小的相互独立的段。假设每η段都有相同的位元个数一位。接着建立一个新的Hash函数Cs (X)(KcsU)彡s),它的作S用就是确定是哪组位元参与了计算。对于集合T= Itpt2, ···&},这个集合可动态的增加元素,它和普通的BF相同,可扩充型布隆过滤器用k个Hash函数Ci (χ),1彡i彡k与前一种算法的区别就是&6 7^(力6{1,2,…,,则^⑴就是在某段中偏移量哈希函数。)步骤二 参考图4所示,使一个元素加入到EBF中。在加入新元素之前,先判断Cs(X)段是否已满,即是否已达到可处理数据的极限, 即是否在允许的误报率范围之内。若超出了这个范围,则创建一个大小为11的新段,这个SYl段的段序号仍然本文档来自技高网
...

【技术保护点】
1.一种可扩充型布隆过滤器方法(EBF,Extendable Bloom Filter),其特征在于,具体步骤如下:步骤A1,向量集合A中的n个位元,拆分成s组较小的相互独立的段。假设每段都有相同的位元个数位;接着建立一个新的Hash函数cs(x)(1≤cs(x)≤s),它的作用就是确定是哪组位元参与了计算。对于集合T={t1,t2,…tn},这个集合可动态的增加元素,它和普通的BF相同,EBF用k个Hash函数ci(x),1≤i≤k。与前一种算法的区别就是则ci(x)就是在某段中偏移量哈希函数。步骤A2,一个元素加入到EBF中;在加入新元素之前,先判断cs(x)段是否已满,即是否已达到可处理数据的极限,即是否在允许的误报率范围之内;若超出了这个范围,则创建一个大小为的新段,这个段的段序号仍然记做cs(x);然后通过公式将新加入进去的元素映射到新创建的段中;若该段没有满,则用上述公式计算,直接将计算所得的位元位置置1。步骤A3,判断新加入的元素是否在特定的集合中;对于加入的元素x,首先计算cs(x),然后检索所有段号为cs(x)的段的第ci(x)位置,若如果其中的一个段中所有ci(x)位置的位元都是1,则就称在一定的误报率下该元素属于集合T;反之,则x不是集合T中的元素。...

【技术特征摘要】

【专利技术属性】
技术研发人员:强彦赵涓涓王小刚遆鸣姜华杰
申请(专利权)人:太原理工大学
类型:发明
国别省市:14

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1