6空间限制-布隆过滤器
题目是一个占用64B的URL,查找其是否存在在100亿个黑名单网页中。允许万分之一的判断失误率,空间限制为30GB。
布隆过滤器常用的场景是黑名单系统、垃圾邮件过滤系统、爬虫的网址判重系统,并且对失误率有一定的容忍度,但是对空间的要求比较严格。
哈希函数(散列函数):输入域是非常大的范围,但是输出域是固定的范围,假设为S,并具有以下的性质:
- 典型的哈希函数都有无限的输入值域
- 当给哈希函数传入相同的输入值时,返回值一样
- 当给哈希函数传入不同的输入值时,返回值有可能不一样
- 最重要的性质是很多不同的输入值所得到的返回值会均匀的分布在S上
其中第4点是判断一个哈希函数优劣的关键(aaa1,aaa2,aaa3比较相似的,但是计算后分布比较大)。一些优秀的哈希函数的实现:MD5、SHA1。
布隆过滤器: 长度为m的bit类型数组,bit的状态是0或者1,有k个哈希函数,这些函数的输出域都等于或者大于m,URL经过k个哈希函数进行计算,取余后的结果在数组上将其涂黑,最后得到一个部分被涂黑的bitmap数组,检查的时候就是对这个URL进行k个哈希函数的计算,每一个值都在这个数组上进行比较,都为黑,那就是大概率是黑名单的URL,但是有及小的误差率,可以用改善哈希函数或者添加到白名单的方式进行避免。
根据样本个数n,失误率p,样本大小64B