我正在尝试根据本文Compressed Bloom Filters by Michael Mitzenmacher实现压缩布隆过滤器实现。我需要计算 m - 位数和 k - 给定的固定误报概率的散列函数数。例如:
我知道如果我有 n = 1000个元素(要插入布隆过滤器)并且给定概率 p = 0.01,那么“最佳”位数将用于布隆过滤器将是(-n * Math.log(p) / (Math.log(2) * Math.log(2)))
= 9585
而且我还需要 k =(9585/1000)* Math.log(2)= 7 - 哈希函数。也就是说,我会得到假阳性率0.01。
为了“压缩”布隆过滤器,我们需要构建更多的“稀疏”过滤器 - 获得更少的散列函数和更多的向量位数。
但我没有想到如何计算这个稀疏滤波器的散列函数数和位数。如果我们将k减少1怎么会增加位数?比例是多少?