插入只把对应位置置一

基础布隆过滤器先建立全零位向量,并选定多组哈希映射。插入一个元素时,计算它对应的位置,把这些位设为一;已经是一的位置保持不变,不为每个元素保存独立的完整副本。

查询使用同一组映射重新检查这些位。只要其中有一位为零,就能判断该元素没有被按当前规则加入;如果所有位置都是一,只能报告可能存在,因为那些位可能分别来自其他已经加入的元素。

参考:[1] [2]

误报方向与精确复核

在只插入、使用相同映射且位向量没有损坏的基础模型中,已加入元素对应的位不会自行变回零,因此不会仅因其他元素加入而产生漏报。误报则可能发生:一个未加入元素的所有位置恰好都已经被置一。

过滤结果不能直接代替精确集合。若下游仍需准确答案,遇到“可能存在”后应继续核对实际记录。位数、哈希数量与预计加入量共同影响空间和误报权衡;不断加入内容而不调整设计,会让更多位置被占满。

参考:[1] [2]

删除与计算开销另有边界

普通位向量不能在删除一个元素时,简单把它的全部位置清零,因为其中一些位可能还为其他元素所共用。这样做会破坏原有的不漏报条件;支持删除需要另设计数或其他合适结构,而不是沿用未经修改的基础操作。

一次查询需要计算若干映射并读取相应位,成本与哈希数量和输入处理有关。紧凑表示还不保存完整元素,不能据此枚举原集合。它适合减少昂贵的后续查询,不是用少量位无条件还原所有原始内容的编码方式。

参考:[1] [2]