通过几个题来进行阐述
网页黑名单系统(有一定的容错率,有限的空间)
例如不安全网页的黑名单里有100亿个数据,每一个网页的URL最多占用64B。要求实现一种过滤系统,可以根据网页的URL判断是否在这个黑名单中。系统允许有万分之一的失误率。且额外的空间不能超过30GB。
首先我们分析一下100亿= 10^10, 64 * 10 ^10 约为640GB的空间,所以要将所有的数据放入内存中,并找出是否包含不可能。
这个系统的空间要求比较高。而且能够容忍一定的错误。这时候我们可以试着往布隆过滤器的方向上想一下。
在此之前我需要简单的介绍一下哈希函数的概念,因为在我们接下来的问题中,几乎都用到了哈希函数。(当然我之后会写一篇关于哈希函数的博客有兴趣可以看看)
哈希函数它是个函数,就对应的有输入域和输出域,它的输入域可以是非常大的范围,比如URL,字符串。但是输出域是固定的,假设为D。
1、典型的哈希函数有无限的输入域
2、哈希函数输入相同值,返回相同的值(比如当我们将有重复出现的值进行哈希到不同的文件时,重复的数就不会到其他文件中)
3、哈希函数输入不同值,返回值可能相同,也可能不同(哈希冲突)
4、很多不同的输入值所得到的返回值均匀的分部在D上。
现在在介绍一下布隆过滤器。
所需要的是
1、一个长度为m的bit数组,bit只有2个状态0和1
2、k个相互独立的哈希函数。