Bloom-Filter算法 简介

Bloom-Filter算法 其实可以看作 bit-map 的一种扩展。

它把已存在的元素通过多个hash 函数映射到一个 bit 序列,对于每一个元素根据hash函数的结果把相应的 位置置一(这个bit序列通常很长,但是比起记住所有元素它占用的空间是小的)。

在判断一个元素时候已存在的时候,它会把这个元素的多个hash结果对应到bit序列中查看,如果已经全部置为一,那么说明该元素已经存在。


一个Bloom Filter有以下参数:


m bit数组的宽度(bit数)
n 加入其中的key的数量
k 使用的hash函数的个数
f False Positive的比率
(假阳性)

为了把错误率控制在 f,共有 n 个元素的集合作 bloom filter 其他参数可以由以下公式来定值:

m =nlg(1/f)*lge (其中 lg 表示以2为底的对数)

k = - ln(f) / ln(2)             


另外对于一个元素非常多的集合要进行 Bloom Filter 操作,必须构造一个返回值范围很大的 hash 函数。可以用 md5 算法生成十六进制的hash值,然后转成十进制:

import hashlib

m=hashlib.md5()
m.update('123123123123123123')
print int(m.hexdigest(), base=16)

详见:http://blog.csdn.net/hguisu/article/details/7866173

你可能感兴趣的:(Bloom-Filter算法 简介)