关于布隆过滤器的问题

244 阅读1分钟

布隆过滤器是为解决在海量数据中检索是否存在而设计的数据结构。

理想情况下,n位bitmap可以容纳2n2^n个元素,已有元素较多时false positive几率大大增加。

假设bitmap长度为mm,现有kk个hash函数,并且对输入域的任意元素,hash得到的值在[0,m][0,m]上均匀分布。

当前过滤器中已插入nn个元素时,已经进行了 knk*n 次插入操作,任意一个bit上为零的概率是 P0=(11m)knP_0=(1-\frac{1}{m})^{k*n},为1的概率是 P1=1(11m)knP_1=1-(1-\frac{1}{m})^{k*n}

此时要插入一个元素,hash得到k个位置,如果这k个位置上已经全为1,则是false positive,概率为 P=(1(11m)kn)kP=(1-(1-\frac{1}{m})^{k*n})^k

用 Matlab 作图,k=3,m=1000k=3,m=1000,P随n变化趋势

可以看到m=1000条件下n=1000时,错误率已经高达80%+,这种情况下即使按照最简单的 bitmap也可以做到100%正确。布隆过滤器优势在何处?