【问题标题】:Computing the approximate population of a bloom filter计算布隆过滤器的近似种群
【发布时间】:2012-02-24 13:48:34
【问题描述】:

给定一个大小为 N 位的布隆过滤器和 K 个哈希函数,其中设置了过滤器的 M 位(其中 M

是否可以估计插入布隆过滤器的元素数量?

简单示例

我一直在考虑下面的例子,假设一个 100 位的 BF 和 5 个设置为 10 位的散列函数......

最好的情况:假设散列函数真的很完美,并且为一些 X 数量的值唯一地映射一个位,那么给定 10 位已经设置,我们可以说只有 2 个元素插入到 BF 中

最坏的情况:假设哈希函数不好并且始终映射到同一个位(但彼此之间是唯一的),那么我们可以说 BF 中插入了 10 个元素

范围似乎是 [2,10],其中大约在这个范围内可能是由过滤器的误报概率决定的 - 我被困在这一点上。

【问题讨论】:

标签: c++ algorithm probability bloom-filter computation


【解决方案1】:

这个问题让我有点担心,因为有better algorithms 用于近似计算具有少量存储的不同元素的数量。

尽管如此,如果我们必须使用布隆过滤器,让我们假设散列函数是随机预言(所有值都是独立选择的,或者“非常完美”,不要与完美散列混淆)。现在我们有一个球和箱子的问题:假设MN 箱子里有球,我们扔了多少球?设B 为投出的球数;项目的数量是B/K,因为对于每个项目,我们都会扔K 球。

balls 和 bins 过程的标准近似是将每个 bin 建模为一个独立的 Poisson 过程;垃圾箱被占用之前的时间呈指数分布。假设1 是投掷所有球所需的时间,则该指数分布速率的最大似然估计λ 满足Pr(Exponential[λ] < 1) = M/N,因此1 - exp(-λ) = M/Nλ = -log(1 - M/N)。参数λ类似于球的数量,所以估计的项目数量是B ≈ -N log(1 - M/N)/K

编辑:有N bins,所以我们需要乘以N

【讨论】:

    【解决方案2】:

    Wikipedia 处的条目为您提供了任何特定位被设置的概率的公式,假设散列函数使一切随机。这是1 - (1-1/m)^kn。由于过滤器中有m 位,这意味着设置的预期/平均位数将为m(1-(1-1/m)^kn)。因此,您可以通过选择n 来对n 做出合理合理的猜测,使其等于实际设置的位数。

    要了解这种猜测可能有多准确,最好了解所设置的位数的方差。你可以准确地解决这个问题,但这有点让人头疼。您可以使用Var(X) = E(X^2) - E(X)^2 的事实。在这种情况下,E(X^2) 主要取决于位对都将被设置的概率,您可以通过考虑诸如“位0 已设置且位1 已明确且所有其他位均已清除”和“0 位已清除”和“除01 之外的所有位均已清除”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多