作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我实现了只使用一种散列算法的布隆过滤器(例如 murmur),这是否仍被视为布隆过滤器?
例如,如果 a
散列到 5
,然后将设置过滤器的第 5 位。如 b
散列到 1
,然后将设置过滤器的第 1 位,依此类推...
对于要被视为布隆过滤器的东西,过滤器中是否至少需要设置两位?如果只设置了一位,它是否称为其他东西?
最佳答案
它仍然是一个布隆过滤器:一个带有 k=1
.根据每个元素的位数,它可能不是最节省空间的。但是,人们可能会选择 k
的原因有很多。那不是 round(bitsPerKey * log(2))
,主要有:
k=1
的布隆过滤器是最好的。另见论文 "Compressed Bloom Filters"来自迈克尔·米岑马赫。 k
是比较快的。 k
成为最节省空间的一个,即使您只使用一个“应用程序哈希函数”(如 64 位的 Murmur 哈希)。您只需选择“Bloom 哈希函数”作为此“应用程序哈希函数”(64 位 Murmur 哈希)的函数,就像这样(假设
int
是 32 位,
long
是 64 位):
long m = murmur(x)
h(x, i) = (int) (m >> 32) + i * (int) m
long m = murmur(x)
int hash = (int) (m >> 32);
int add = (int) m;
for (int i = 0; i < k; i++) {
... test / set the bit depending on "hash" ...
hash += add;
}
关于bloom-filter - 只有一个输入哈希的布隆过滤器仍然是布隆过滤器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53473556/
我是一名优秀的程序员,十分优秀!