我无法理解使用动态集布隆过滤器的可能问题。
您能告诉我在添加/删除集合中的元素时可能出现的一些问题吗?
答案 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,但它也有负面效果。
还有一个问题,就是如果你的设置是动态的并且能够保持增长,那么增加它的大小并不容易。你不能简单地分配双倍的空间,并重新整理整个集合,你不知道原始元素是什么。
因此,当其大小已知(或有界)时,使用布隆过滤器。