您的位置:首页 > 其它

Bloom Filter个人理解

2011-10-16 23:53 155 查看
全力一搏盛大 于是这几天看海量数据方面的文章 刚刚看了bloom filter的原理 个人总结下

首先 bloom filter用在判断一个数是否在集合中 有不可否认的速度(取决于哈希函数的个数) 以及空间复杂度

对于集合s={x1,x2....xn} 首先必须对他进行类似编码的操作 即 维护一个长度为m的位数组bitArray(每个元素都是一个二进制位,即一个bit),然后线性遍历这个集合,分别对每个元素调用K个哈希函数,将其映射到对应的bitArray中的位置,将该位置值设置为1,若该位置已经被置为1了则不进行操作,这样就初始化了bitArray

当要查找某个关键字是否在集合s中时,对其依次调用之前的K个哈希函数,分别查看哈希后的值在bitArray中是否为1,然后统计,若K个哈希调用之后,所有位置值都为1,则该元素就存在于集合s中,注意,这个存在是有一定误差的,因为可能会有特殊的值也正好使得哈希后得到的地址值在每个位上都为1,所以说,bloom filter是允许有一定误差的,这个误差解释为,可能某个不存在于集合中的值被判断为存在,即false postion,但是反之,一个存在于集合中的值不可能被误判为不存在。

这里主要的问题是集合bitArray的大小,即m的大小,以及哈希函数的个数K,这里假设正确率为e,根据一系列牛逼哄哄的数学推导,可以得出m的最小值m(min)=n*lg2(1/e),而要获得最优的哈希函数的个数K时,m=1.44m(min),K=ln2*(m/n),这里怎么得出这些式子的我就不讨论了,要是我能弄明白我就真应该去考个研了(高数没学好的劣势就在这里体现出来了~),这篇文章主要还是个人理解bloom filter
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: