给定大小为N位和K个散列函数的布隆过滤器,其中设置了滤波器的M位(其中M <= N)。
是否可以估算插入布隆过滤器的元素数量?
简单示例
我一直在考虑以下示例,假设一个100位的BF和5个散列函数,其中设置了10位......
最佳情况:假设散列函数非常完美且唯一地映射了一些X值的值,那么给定10位已设置,我们可以说只有2个元素插入BF
最糟糕的情况:假设哈希函数不好并且一致地映射到相同的位(但彼此之间是唯一的),那么我们可以说已经将10个元素插入到BF中
范围似乎是[2,10],其中这个范围内的大概可能是由过滤器的假阳性概率决定的 - 我现在卡在了这一点。
答案 0 :(得分:12)
这个问题让我有点担心,因为有better algorithms来计算存储量很少的不同元素的数量。
然而,如果我们必须使用Bloom过滤器,我们假设散列函数是随机的oracles(所有值都是独立选择的,或者“非常完美”,不要与完美散列相混淆)。现在我们有一个球和箱子的问题:鉴于M
个N
箱子里面有球,我们扔了多少个球?让B
成为抛出的球的数量;项目数为B/K
,因为每个项目我们都会投掷K
个球。
球和箱过程的标准近似是将每个箱建模为独立的泊松过程; bin被占用之前的时间是指数分布的。假设1
为抛出所有球所需的时间,此指数分布率的最大似然估计λ
满足Pr(Exponential[λ] < 1) = M/N
,因此1 - exp(-λ) = M/N
和{{ 1}}。参数λ = -log(1 - M/N)
类似于球的数量,因此项目数的估算值为λ
。
编辑:有B ≈ -N log(1 - M/N)/K
个分区,因此我们需要乘以N
。
答案 1 :(得分:0)
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
之类的语句的设置概率和位{{1}来解决这个问题。 }}清除,所有其他位都清晰“和”位0
清除“和”除0
和1
之外的所有位都清楚“。