Bloom Filter个人理解

全力一搏盛大 于是这几天看海量数据方面的文章 刚刚看了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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值