Data structures Bloom过滤器在处理动态集时可能出现的问题

Data structures Bloom过滤器在处理动态集时可能出现的问题,data-structures,computer-science,bloom-filter,Data Structures,Computer Science,Bloom Filter,我很难理解动态布卢姆过滤器可能存在的问题 您能告诉我在从集合中添加/删除元素时可能出现的一些问题吗?主要问题是bloom过滤器不是为删除而设计的 比如说。 假定 并考虑在集合中有2个元素: 2,4 您拥有位集: bitset = { 0, 1, 1, 0, 1 } 现在要从集合中删除2。你是怎么做到的?您不知道位集[4]对这两个元素都是公共的,一旦删除它,您将得到新的位集: bitset' = { 0, 0, 1, 0, 0 } 但是现在,如果您试图检查4是否在其中,您将得到错误的答案

我很难理解动态布卢姆过滤器可能存在的问题


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

主要问题是bloom过滤器不是为删除而设计的

比如说。 假定

并考虑在集合中有2个元素:<代码> 2,4

您拥有位集:

bitset = { 0, 1, 1, 0, 1 }
现在要从集合中删除2。你是怎么做到的?您不知道位集[4]对这两个元素都是公共的,一旦删除它,您将得到新的位集:

bitset' = { 0, 0, 1, 0, 0 } 
但是现在,如果您试图检查
4
是否在其中,您将得到错误的答案

一个可能的解决办法是允许去除布卢姆过滤器,但它也有其负面影响


还有一个问题是,如果您的集合是动态的,并且可以保持增长,那么增加其大小并不是件小事。您不能简单地分配两倍的空间,并重新显示整个集合,因为您不知道原始元素是什么

因此,当布卢姆滤波器的大小先验已知(或有界)时,就使用它

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