压缩布隆过滤器

时间:2016-07-22 07:23:47

标签: algorithm data-structures bloom-filter

我对Bloom filters感到高兴,所以我开始阅读有关它们的出版物。有一件事,我无法理解。我们如何压缩Bloom filter因为它是一个随机0-1向量?

2 个答案:

答案 0 :(得分:1)

您不需要压缩布隆过滤器。

并非所有的键都有一点代表它们。它们由许多位表示,这些位可以重用于其他键。这就是为什么你会得到误报的原因。当您添加键a,b和c时,您将位数设置为1.对于下一个键d,可能是表示它的所有位都已设置为1,因此您不需要这样做任何事情(如果在插入a,b和c之后检查它是否被插入,你会得到误报。)

您可以将布隆过滤器大小设置为您想要的任何值。如果你把它做得更大,你可以使用更多的空间,但是你可以减少误报。如果你把它缩小,你也会增加误报。

如果您确实需要将布隆过滤器缩小,请将其大小设置为尽可能大小,然后检查误报率。您可以通过选择一组不同的键来检查布隆过滤器是否已经插入并插入它们(以某种随机顺序)。确保按键数量代表您的实际使用情况。

你可以通过一些压缩算法传递它,但正如你所说,它是一个随机的0-1向量,所以不要期望获得很多。

通常,在进行一些昂贵的查找/读取之前,使用bloom过滤器作为对存在的快速检查。你需要它在内存中快速(如果你不关心速度,你只需要进行查找),你需要它没有压缩。如果它足够小以容纳在内存中,通常没有必要压缩它。

答案 1 :(得分:1)

论文Compressed Bloom Filters(pdf)解释了一般概念。在该文件的第3页,他们说:

  

但是,假设我们选择k以便每个条目都在   m位数组为1,概率为1/3。然后我们可以利用   这一事实压缩m位阵列并减少传输   大小

因此,不是设计一个矢量,以便设置一个位的概率为1/2,这将创建"随机矢量"它不能很好地压缩,它们会影响哈希函数的数量以影响概率。得到的数组约为三分之一,而三分之二为0,这应该更具可压缩性。