布隆过滤器处理动态集时可能出现的问题

时间:2016-04-08 15:24:54

标签: data-structures computer-science bloom-filter

我无法理解使用动态集布隆过滤器的可能问题。

您能告诉我在添加/删除集合中的元素时可能出现的一些问题吗?

1 个答案:

答案 0 :(得分:0)

主要问题是布隆过滤器不是为移除而设计的。

例如。 假设

h1(x) = x %5
h2(x) = (x+2) % 5

并且考虑到集合中有2个元素:2,4

你有位置:

bitset = { 0, 1, 1, 0, 1 }

现在你要从集合中删除2。你怎么做呢?你不知道bitset [4]对于这两个元素都是通用的,一旦你删除它,你将得到新的bitset:

bitset' = { 0, 0, 1, 0, 0 } 

但现在,如果您尝试检查4是否在其中,您将得到错误的答案。

允许移除布隆过滤器的可能解决方案是counting bloom filters,但它也有负面效果。

还有一个问题,就是如果你的设置是动态的并且能够保持增长,那么增加它的大小并不容易。你不能简单地分配双倍的空间,并重新整理整个集合,你不知道原始元素是什么。

因此,当其大小已知(或有界)时,使用布隆过滤器。