用在容错率低的场合下
Step 1
m位的位数组
0 0 0 0 0 0 0 0 0 0 0 0
n个元素集合 S = {x1, x2, ..., xn}
使用独立k个哈希函数
将元素映射到 {1,..., m}的范围中
如何判断一个新元素y属于这个集合S?
对y使用k次哈希函数,如果所有 hi(y)位置都为1,则认为是,否则则不是。
Step 2
错误率估计
当采用k个哈希函数后,某位依然是0的概率
p = (1 - 1/m)^(kn)
Step 3
最优哈希
哈希函数个数多:对一个不属于集合的查询得到位数为0的概率大
哈希函数个数少:位数组中的0DUO
想要错误率低,最好让一半数组置空
p = 1/2
Step 4
位数组大小
假设有u个元素,允许最大错误率为e
X为集合中任取n个元素的集合
F(X)表示X的位数组。
对X中任意元素,F(X)中均有结果。
或者有 e(u-n)个错误
因此,能接受 n + e(u-n)个元素。
一个确定的位数组可以表示
(n + e(u-n), n)个集合
m位的位数组可以表示
(n + e(u-n), n) 2^m 个集合。
全集合中n个元素共有
(u, n)
要让m位的位数组表示所有n个元素的集合,必须有
(n + e(u-n), n) 2^m >= (u, n)
m >= n log2(1/e)
所以m至少要是n的1.44倍