【问题标题】:How do hash values map to the vector in a bloom filter?散列值如何映射到布隆过滤器中的向量?
【发布时间】:2014-01-21 02:24:10
【问题描述】:

在实现布隆过滤器时,有几个潜在的移动部分:

m = 位向量的大小 n = 项目(预期)插入过滤器 k = 要使用的哈希数

我知道 m/n 和 k 之间存在最佳关系,但是我还没有找到关于如何将 k 哈希映射到更大 m 值的位向量的清晰解释。

在我读到的几乎每个示例中,人们都使用微不足道的 m 值 (>256),并且他们显示哈希函数严重重叠。对于小于 256 位的情况,很容易想象拥有 k 个 256 位哈希函数并将它们与向量进行 ORing。

随着 m 变大以降低 n 较大值的误报率,我不确定应该如何将散列映射到向量。我已经看到了一些想法,例如对向量进行分区并将“独立”(例如不同的杂音种子)哈希应用于向量的每个 128 位部分。但是我还没有看到一个具体的例子来说明如何为更大的 n/m 值实现布隆过滤器。

【问题讨论】:

  • 我想,我不明白你的问题。 wiki page 描述了选择适当的 m、n 和 k 值背后的数学原理。我永远不会分割位向量。我看不出这有什么帮助。我总是为每个散列函数使用所有位。我没有看到更小或更大的 256 位数组之间的一般差异。虽然 256 位非常小,但如果您有这么小的向量,布隆过滤器可能不适合您的问题。
  • 是的。我要结束这个问题。不知何故,我错过了每个散列映射到向量的单个位,而不是每个散列与向量的 OR。我将在各种解释中归咎于误导性图表。

标签: algorithm vector hash bloom-filter


【解决方案1】:

当我学习 Bloom 过滤器时,下面的页面对我帮助很大:

http://matthias.vallentin.net/blog/2011/06/a-garden-variety-of-bloom-filters/

那里描述的所有内容都是作为一个开源库实现的。查看其来源也很有帮助。

【讨论】:

    【解决方案2】:

    当有这么多元素时,我宁愿依赖简化的密码学哈希函数 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      相关资源
      最近更新 更多