【发布时间】: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