一种布隆过滤器的生成方法与流程

文档序号:16999479发布日期:2019-03-02 01:39阅读:196来源:国知局
本发明涉及元素查询匹配的算法
技术领域
:,具体涉及一种布隆过滤器的生成方法。
背景技术
::在日常生活中,包括在设计计算机软件时,我们经常要判断一个元素是否在一个集合中。比如在字处理软件中,需要检查一个英语单词是否拼写正确(也就是要判断它是否在已知的字典中);在fbi,一个嫌疑人的名字是否已经在嫌疑名单上;在网络爬虫里,一个网址是否被访问过等等。最直接的方法就是将集合中全部的元素存在计算机中,遇到一个新元素时,将它和集合中的元素直接比较即可。一般来讲,计算机中的集合是用哈希表(hashtable)来存储的。它的好处是快速准确,缺点是费存储空间。当集合比较小时,这个问题不显著,但是当集合巨大时,哈希表存储效率低的问题就显现出来了,我们需要寻求更好的解决方法。布隆过滤器(bloomfilter)是1970年由布隆提出的一种空间空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并判断一个元素是否属于这个集合。使用布隆过滤器,存在第一类出错(falsepositive),但是不会存在第二类错误(falsenegative),因此,布隆过滤器拥有100%的召回率。也就是说,布隆过滤器能够准确判断一个元素不在集合内,但只能判断一个元素可能在集合内。因此,bloomfilter不适合“零错误”的应用场合。在能够容忍低错误的应用场合下,bloomfilter通过极少的错误换取了存储空间的极大节省。我们可以向布隆过滤器里添加元素,但是不能从中移除元素(普通布隆过滤器,增强的布隆过滤器是可以移除元素的)。随着布隆过滤器中元素的增加,犯第一类错误的可能性也随之增大。一个空的布隆过滤器有长度为m比特的bit数组构成,且所有位都初始化0。一个元素通过k个不同的hash函数随机散列到bit数组的k个位置上,k必须远小于m。k和m的大小由错误率(falsepositiverate)决定。bloomfilter的一个例子集合s{x,y,z}。带有颜色的箭头表示元素经过k(k=3)hash函数的到在m(bit数组)中的位置。元素w不在s集合中,因为元素w经过k个hash函数得到在m(bit数组)的k个位置中存在值为0的位置。向集合s中添加元素x:x经过k个散列函数后,在m中得到k个位置,然后,将这k个位置的值设置为1。判断x元素是否在集合s中:x经过k个散列函数后,的到k个位置的值,如果这k个值中间存在为0的,说明元素x不在集合中——元素x曾经插入到过集合s,则m中的k个位置会全部置为1;如果m中的k个位置全为1,则有两种情形。情形一:这个元素在这个集合中;情形二:曾经有元素插入的时候将这k个位置的值置为1了。在假通过率可接受的前提下,布隆过滤器很好的解决了存储的空间问题,但传统的布隆过滤器还存在一些不足之处,当布隆过滤器表示的数据元素集合中元素动态增加和删除时,传统的布隆过滤器可能无法较好的适应,如当需要删除集合中某个元素时,即布隆过滤器表示的集合中的某个元素需要动态删除时,必须要重建整个布隆过滤器的位向量;当集合中增加元素时,布隆过滤器的假通过率会不断攀升,并最终导致假通过率超出可接受的范围,如果要使假通过率在可接受的范围内,则当集合中元素增加时,也需要重建整个布隆过滤器的位向量。当集合中的元素较少时,重建整个布隆过滤器的问题可能并不显著,但当集合元素很庞大的时候,重建布隆过滤器所带来的时间开销是不容忽视的。技术实现要素:本发明的目的在于克服现有技术中存在的问题,提供一种布隆过滤器的生成方法,它可以提供一种布隆过滤器的生成方法,通过该方法生成的布隆过滤器,当布隆过滤器表示的集合中需要增加或删除一个元素时,只需要根据分组散列函数确定该元素的对应的子集合,重建该子集合的位向量,能够避免传统的布隆过滤器在增加或删除元素时,需要重建整个布隆过滤器的位向量,节省重建开销。为实现上述技术目的,达到上述技术效果,本发明是通过以下技术方案实现的:一种布隆过滤器的生成方法,包括如下步骤:步骤1、确定一个散列函数作为分组散列函数;步骤2、根据所述分组散列函数,将所述布隆过滤器表示的数据元素集合分为m个子集合;步骤3、确定每一个子集合对应的位向量长度li和散列函数个数ni;步骤4、对m个子集合中的每一个子集合执行:根据子集合对应的散列函数个数ni,选择ni个散列函数作为子集合的散列函数,以及将子集合中的每一个元素分别根据该子集合的ni个散列函数确定ni个散列值,将ni个散列值对应的位向量的位置设置标识,生成该子集合的位向量;步骤5、生成包含所述分组散列函数,以及m个子集合中每一个子集合的位向量和子集合散列函数的布隆过滤器。进一步地,所述步骤2中,具体包括如下步骤:步骤2.1、根据所述分组散列函数确定所述布隆过滤器表示的数据元素集合中每一个元素的分组散列值;步骤2.2、根据每一个元素的分组散列值将数据元素集合中的元素分为m个子集合。进一步地,所述步骤2.2中具体包括如下步骤:据每一个元素的分组散列值对m取余数,将余数相同的元素划分为一个子集合,将数据元素集合中的元素分为m个子集合。进一步地,所述步骤3中根据使用所述布隆过滤器过滤元素时设定的最高假通过率,以及每一个子集合中的元素个数,分别确定每一个子集合对应的位向量长度li和散列函数个数ni。进一步地,所述步骤3中根据使用所述布隆过滤器过滤元素时设定的最高假通过率,以及每一个子集合中的元素个数和每一个子集合设定的元素的预留增加个数,分别确定每一个子集合对应的位向量长度li和散列函数个数ni。进一步地,各个所述子集合中的散列函数个数ni相同。本发明的有益效果:生成方法中,根据分组散列函数将布隆过滤器表示的数据元素集合中的元素分为m个子集合,并分别确定每一个子集合的位向量长度以及子集合散列函数,将子集合中的每一个元素利用子集合的散列函数确定散列值,将散列值对应的位向量的位置设置标识,生成每一个子集合的位向量,并生成包含分组散列函数,以及m个子集合中每一个子集合的位向量和子集合散列函数的布隆过滤器,当布隆过滤器表示的集合中需要增加或删除一个元素时,只需要根据分组散列函数确定该元素的对应的子集合,重建该子集合的位向量,能够避免传统的布隆过滤器在增加或删除元素时,需要重建整个布隆过滤器的位向量,节省重建开销。具体实施方式为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。一种布隆过滤器的生成方法,包括如下步骤:步骤1、确定一个散列函数作为分组散列函数;步骤2、根据所述分组散列函数,将所述布隆过滤器表示的数据元素集合分为m个子集合;步骤3、确定每一个子集合对应的位向量长度li和散列函数个数ni;步骤4、对m个子集合中的每一个子集合执行:根据子集合对应的散列函数个数ni,选择ni个散列函数作为子集合的散列函数,以及将子集合中的每一个元素分别根据该子集合的ni个散列函数确定ni个散列值,将ni个散列值对应的位向量的位置设置标识,生成该子集合的位向量;步骤5、生成包含所述分组散列函数,以及m个子集合中每一个子集合的位向量和子集合散列函数的布隆过滤器。所述步骤2中,具体包括如下步骤:步骤2.1、根据所述分组散列函数确定所述布隆过滤器表示的数据元素集合中每一个元素的分组散列值;步骤2.2、根据每一个元素的分组散列值将数据元素集合中的元素分为m个子集合。所述步骤2.2中具体包括如下步骤:据每一个元素的分组散列值对m取余数,将余数相同的元素划分为一个子集合,将数据元素集合中的元素分为m个子集合。所述步骤3中根据使用所述布隆过滤器过滤元素时设定的最高假通过率,以及每一个子集合中的元素个数,分别确定每一个子集合对应的位向量长度li和散列函数个数ni。所述步骤3中根据使用所述布隆过滤器过滤元素时设定的最高假通过率,以及每一个子集合中的元素个数和每一个子集合设定的元素的预留增加个数,分别确定每一个子集合对应的位向量长度li和散列函数个数ni。各个所述子集合中的散列函数个数ni相同。本发明提供一种布隆过滤器生成装置,包括:分组单元,所述分组单元用于确定一个散列函数作为分组散列函数,并根据所述分组散列函数,将所述布隆过滤器表示的数据元素集合分为m个子集合;确定单元,所述确定单元用于确定每一个子集合对应的位向量长度li和散列函数个数ni;执行单元,所述执行单元用于对m个子集合中的每一个子集合执行以下内容:a、根据子集合对应的散列函数个数ni,选择ni个散列函数作为子集合的散列函数;b、将子集合中的每一个元素分别根据该子集合的ni个散列函数确定ni个散列值;c、将ni个散列值对应的位向量的位置设置标识,生成该子集合的位向量;d、生成包含所述分组散列函数,以及m个子集合中每一个子集合的位向量和子集合散列函数的布隆过滤器。本发明提供一种对生成的布隆过滤器的更新方法,包括如下步骤:步骤a、当布隆过滤器表示的数据元素集合中删除或增加一个元素时,根据分组散列函数确定所述元素对应的子集合;步骤b、在该子集合中增加或删除所述元素,并将该子集合对应的位向量、子集合散列函数删除;步骤c、重新确定所述子集合对应的位向量长度li′以及子集合散列函数个数ni′;步骤d、根据所述子集合的散列函数个数ni′,选择ni′个散列函数作为子集合的散列函数;步骤e、对所述子集合执行:将子集合中的每一个元素分别根据该子集合的ni′个散列函数确定ni′个散列值,将ni′个散列值对应的位向量的位置设置标识,生成所述子集合的位向量。所述步骤a中的子集合包括:根据分组散列函数确定所述元素的分组散列值、根据分组散列值确定所述元素对应的子集合。所述更新方法还包括:步骤f、当所述步骤e中的子集合中增加所述元素时,确定所述子集合设定了预留增加元素;步骤g、所述预留增加元素的个数有剩余时,根据所述子集合的ni个子集合散列函数,确定所述元素的ni个散列值;步骤h、将ni个散列值对应的位向量的位置设置标识,更新该子集合的位向量。所述更新方法还包括:步骤i、当确定所述子集合的预留增加元素的个数没有剩余时,将该子集合对应的位向量、子集合散列函数删除;步骤j、返回步骤c。本发明还提供一种布隆过滤器更新装置,包括如下:删除单元,所述删除单元用于当布隆过滤器表示的数据元素集合中删除或增加一个元素时,根据分组散列函数确定所述元素对应的子集合,在该子集合中增加或删除所述元素,并将该子集合对应的位向量、子集合散列函数删除;确定单元,所述确定单元用于重新确定所述子集合对应的位向量长度li′以及子集合散列函数个数ni′,根据所述子集合的散列函数个数ni′,选择ni′个散列函数作为子集合的散列函数;执行单元,所述执行单元用于对所述子集合执行如下内容:将子集合中的每一个元素分别根据该子集合的ni′个散列函数确定ni′个散列值、将ni′个散列值对应的位向量的位置设置标识,生成所述子集合的位向量。所述更新装置还包括:更新单元,所述更新单元用于当在该子集合中增加所述元素时,确定所述子集合设定了预留增加元素以及预留增加元素的个数有剩余时,根据所述子集合的ni个子集合散列函数,确定所述元素的ni个散列值,将ni个散列值对应的位向量的位置设置标识,更新该子集合的位向量。所述删除单元还用于当确定所述子集合的预留增加元素的个数没有剩余时,将该子集合对应的位向量、子集合散列函数删除。本发明还提供一种上述生成的布隆过滤器的查询元素方法,包括如下步骤:a、根据分组散列函数确定需要查询的元素对应的子集合;b、根据所述步骤a中的子集合的ni个子集合散列函数,确定所述元素的ni个散列值;c、当子集合对应的位向量的ni个散列值对应的位置都设置标识时,确定所述元素属于布隆过滤器表示的数据元素集合。所述步骤a中的具体步骤包括:1)、根据分组散列函数确定所述元素的分组散列值;2)、根据分组散列值确定所述元素对应的子集合。本发明还提供一种查询元素的装置,包括:分组单元,所述分组单元用于根据分组散列函数确定需要查询的元素对应的子集合;确定单元,所述确定单元用于根据所述子集合的ni个子集合散列函数,确定所述元素的ni个散列值;查询单元,所述查询单元用于当子集合对应的位向量的ni个散列值对应的位置都设置标识时,确定所述元素属于布隆过滤器表示的数据元素集合中的元素。以上公开的本发明优选实施例只是用于帮助阐述本发明。优选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属
技术领域
:技术人员能很好地理解和利用本发明。本发明仅受权利要求书及其全部范围和等效物的限制。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1