题目:不安全网页的黑名单包含100亿个黑名单网页,每个网页的URL最多占用64B。现在想要实现一个网页过滤系统,利用该系统可以根据网页是否在黑名单上,请设计该系统。
要求:
1.该系统允许有万分之一以下的判断失误率。
2.使用的额外空间不要超过30GB。
布隆过滤器到底该怎么实现?根据书上所说,如果bitMap的大小m相比输入对象的个数n过小,失误率会变大。接下来先介绍根据n的大小和我们想要达到的失误率p,如何确定布隆过滤器m和哈希函数的个数k,最后是布隆过滤器的失误率分析。下面以本题为例说明。
黑名单中样本的个数为100亿个,记为n;失误率不能超过0.01%,记为p;每个样本的大小为64B,这个信息不回影响布隆过滤器的大小,只和选择哈希函数有关,一般的哈希函数都是可以接收64B的输入对象,所以使用布隆过滤器还有一个好处是不用顾虑单个样本的大小,它丝毫不影响布隆过滤器的大小。
一下两个公式:
m=-(nlnp)/(ln2ln2);
k=ln2*m/n;
根据上面的公式算出布隆过滤器的大小m和哈希函数的个数 k。