【问题标题】:Compressed bloom filters压缩布隆过滤器
【发布时间】:2016-07-22 07:23:46
【问题描述】:

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

【问题讨论】:

  • 为什么要压缩一个布隆过滤器?您是否尝试过压缩一个以查看您的假设是否正确?
  • 在许多关于bloom filter 过滤器压缩的出版物中都提到了。我什至无法想象压缩随机向量所以我在问
  • 阅读论文:*Compressed Bloom Filters" eecs.harvard.edu/~michaelm/NEWWORK/postscripts/cbf2.pdf 他们使用哈希函数玩游戏,这使得数组不像随机向量,因此压缩效果更好。
  • 它已经在我的书签里了 :) 我希望有人能解释一下这部分关于压缩的内容。我有一种感觉,他们称之为选择最佳尺寸压缩。
  • 如果您首先向我提供了该论文的链接,并明确询问您不理解的部分,那就太好了。你需要更仔细地研究那篇论文,因为你的问题的答案在第 3 页上已经很清楚地说明了。

标签: algorithm data-structures bloom-filter


【解决方案1】:

论文Compressed Bloom Filters (pdf) 解释了总体思路。在该文件的第 3 页,他们说:

然而,假设我们选择 k 使得 m 位数组为 1,概率为 1/3。然后我们可以利用 这个事实来压缩m位数组并减少传输 大小。

因此,与其设计一个向量以使设置位的概率为 1/2,否则会创建压缩效果不佳的“随机向量”,而是摆弄散列函数的数量来影响概率。结果数组大约有三分之一的 1 和三分之二的 0,这应该证明更可压缩。

【讨论】:

  • 标记为已接受,因为上面的多个 cmets 真的很有帮助。
【解决方案2】:

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

并非所有的键都可以代表它们。它们由许多可重复用于其他密钥的位表示。这就是为什么你会得到误报。当您添加键 a、b 和 c 时,您将多个位设置为 1。对于下一个键 d,可能是所有代表它的位都已设置为 1,因此您无需执行任何操作(如果您在插入 a、b 和 c) 之后检查是否插入,则会得到误报。

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

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

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

一般来说,布隆过滤器用于在进行一些昂贵的查找/读取之前快速检查是否存在。您需要它在内存中快速(如果您不关心速度,您只需进行查找)并且您需要它未压缩。如果它小到足以保存在内存中,那么压缩它通常是没有意义的。

【讨论】:

  • 还有另一种数据结构——压缩布隆过滤器。这就是我的要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
  • 2011-09-22
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多