简介
布隆过滤器(Bloom Filter)实际上是一个很长的二进制向量和一系列随机映射函数。
布隆过滤器可以用于检索一个元素是否在一个集合中。
原理
当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在集合中(获得在这个集合中的概率)。
False positives 概率推导
BloomFilter有以下参数:
- m 位数组的长度
- n 加入其中元素的数量
- k 哈希函数的个数
- f False Positive
假设 Hash 函数以等概率条件选择并设置 Bit Array 中的某一位,那么位数组中某一特定的位在进行元素插入时的 Hash 操作中没有被置位的概率是:
1 − 1 m 1-{1\over m} 1−m1
那么在所有 k 次 Hash 操作后该位都没有被置 “1” 的概率是:
( 1 − 1 m ) k (1-{1\over m})^k (1−m1)