【问题标题】:False positive number Bloom filter假正数布隆过滤器
【发布时间】:2023-04-09 07:57:01
【问题描述】:

我用 3 个哈希函数实现了一个布隆过滤器,现在我应该计算该过滤器中误报的确切数量(不可能)。有没有一种有效的计算方法?过滤器项数为2亿,位数组大小为4亿

【问题讨论】:

  • 你的意思是这样的吗? hur.st/bloomfilter
  • @Andrej Kesely 不,这给出了误报的概率,我想要我的布隆过滤器中误报的确切数量
  • 布隆过滤器是一种概率数据结构。根据定义,您无法计算 Bloom 过滤器中将出现的误报的确切数量,因为它取决于输入。即使您有一个填充的 Bloom 过滤器并且您想知道有多少键会被错误识别,这也将非常困难(取决于键类型,甚至是不可能的),因为可能键的范围本质上是无限的,您将拥有检查每一个。
  • 问题不清楚。就键或散列而言,误报的确切数量是多少?对于 32 个哈希,您可以计算(使用蛮力)。对于钥匙:你有钥匙列表吗?然后您可以使用循环进行计算。如果不是,并假设它们是例如字符串,你不能,因为可能的键数是无限的。

标签: python dataframe hash bloom-filter


【解决方案1】:

是的,而且很简单。

计算“开启”的位数并将其除以总位数。这将为您提供填充率。

查询时,之前插入的所有元素都会命中“on”位并返回正数。对于未插入过滤器的元素,命中“on”位的概率是您的填充率。因此,使用 3 个哈希函数,您的错误率将是 (fill_rate^3)。

虽然 0.5 是最大化空间与错误率的最佳填充率,但任何其他填充率都是可能的,但它会占用太多空间或错误率高于所需。因此,您最好使用 4 个空间较小的散列函数。这实际上取决于您的用例。你的要求是什么?您在寻找什么错误率?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2010-10-12
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多