数学之美:布隆过滤器

在判断垃圾邮件时,我们需要判断当前邮件是否在垃圾邮件集合中。而判断一个元素是否存在集合中,最好还是使用哈希表。但如果这个集合非常庞大,如需要存储一亿个邮件地址。使用哈希表将每个邮件地址哈希成8个字节,加上哈希表的存储效率只有50%,那么总共就需要1*8*2=16亿字节,也就是1.6GB的内存。如果是几十亿,那么需要上百GB内存,一般计算机是无法满足的。

而布隆过滤器可以实现仅用1/8-1/4的大小就能解决该问题。原理如下:

布隆过滤器不会漏掉黑名单中任何一个地址,但是可能会出现某些不在黑名单中的邮件地址也被认为在黑名单内。因为某个邮件地址对应的8个地址可能恰好在被设置成了1。因此有一定的误识别率,常见解决办法是添加一个白名单。

布隆过滤器背后的数学原理在于两个完全随机的数字冲突的概率很小,因此可以在很小的误识别概率下用较少的存储空间存储大量信息,由于只涉及到算术运算,因此速度快,使用方便。

猜你喜欢

转载自blog.csdn.net/qq_16234613/article/details/82798892
今日推荐