16位整数的Bloom滤波器概率



我有一个16位无符号整数的列表。

我唯一想知道的是列表中是否有数字。

我可以用一个比特向量来表示。如果我在列表中,我只设置位[I]。要知道列表中是否有一个数字y,我会查找bit[y]。这将永远给出正确的答案。

但我想保存记忆。并且使用更少的比特,但允许误报。I.e一个数字会被允许返回它在列表中,即使它不在。但没有假阴性。

根据我的理解,布隆过滤器可以做到这一点。我不明白的是,当我使用bloom过滤器计算器时,通过设置例如:的概率

  • 400个条目(n(
  • 400位(m(
  • 1散列函数(k(

假阳性的概率不是零。例如https://hur.st/bloomfilter/

例如,如果我平均有400个不同的16位数字,并且希望使用尽可能少的空间,那么bloom过滤器是个好主意吗?

人们应该如何看待这种可能性?很明显,一个比特矢量给出了16k比特的完美结果。我可以使用bloom过滤器少多少空间,以及增加误报的成本。

有更好的东西可以解决我的问题吗。

Bloom Filter很可能是您所需要的合适对象。空间要求是问题所在:

  • 您必须有足够的元素使其合理(至少值得存储哈希函数生成器(,并且
  • 足够的比特来将假阳性减少到可接受的水平

换句话说,不要专注于使用尽可能小的空间;而应该专注于使用足够的空间。如果没有自定义的、专门的过滤器,你仍然会使用比任何东西都少的空间。

最新更新