1. 布隆滤波器原理
在日常开发过程中,会经常遇到元素是否存在集合判断和去重问题,例如我们会判断一个email地址是否在黑名单中,网络爬虫会判断一个url是否已经存在于待抓取列表或者已抓取,视频库的去重等等。不幸的是通常情况下这类问题面临的数据规模都较大,比如网络爬虫系统的抓取url通常达到数亿级别,如果采用哈希表存储这些url将会耗费大量的内存以至于在实际生产使用过程中几乎不可用,而布隆滤波器确实一种近乎完美的替代方案。(谨记:大部分的近似方案虽然会带来少量的损失,但是会给性能和效果带来极大的提升)
布隆过滤器(Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的。它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。
布隆滤波器会有一个m位的bit数组(每位初始设为0)以及k个随机哈希函数,每个哈希函数的输出都是一个(0,m-1)之间的一个数(对应bit数组下标)。
添加操作:输入x,对于每一个哈希函数,计算j= hi(x),将m_bit[j] 设成1;
查询操作