布隆过滤器(Bloom Filter)

1.简介

布隆过滤器是一种多哈希函数映射的快速查找算法。它可以判断出某个元素肯定不在集合里或者可能在集合里,即它不会漏报,但可能会误报。通常应用在一些需要快速判断某个元素是否属于集合,但不严格要求100%正确的场合。

2.原理

  1. 首先需要k个hash函数,每个函数可以把key散列成为1个整数
  2. 初始化时,需要一个长度为m比特的数组,每个比特位初始化为0
  3. 某个key加入集合时,用k个hash函数计算出k个散列值,并把数组中对应的比特位置为1
  4. 判断某个key是否在集合时,用k个hash函数计算出k个散列值,并查询数组中对应的比特位,如果所有的比特位都是1,认为在集合中。否则,只要有一个为0,那么就肯定不在集合里

3.优缺点

优点:不需要存储实际key值,节约空间,能够确定一个值肯定不在集合里;
缺点:对于计算认为在集合里的,有一定几率不在;不能删除集合里的任何一个;

4.求变量

设 位数组大小为m,数据集合里的数据个数为n,错误率为p,哈希函数个数为k
则:
    m = -(n*lnp) / (ln2)^2
    k = ln2 * m / n

5.应用

1.搜索引擎中的海量网页去重
2.leveldb等数据库中快速判断元素是否存在,可以显著减少磁盘访问

猜你喜欢

转载自blog.csdn.net/luvalluo/article/details/81669096