对google黑板报Bloom Filter的补充

 

1. 黑板报上说:

对于每一个电子邮件地址 X,我们用八个不同的随机数产生器(F1,F2, …,F8) 产生八个信息指纹(f1, f2, …, f8)。再用一个随机数产生器 G 把这八个信息指纹映射到 1 到十六亿中的八个自然数 g1, g2, …,g8。

其实这句话有点绕人, 本质上来说, 就是有8个不同的Hash 函数, 能把这个 X 映射到八个自然数. (实际上对于好的Hash 函数, 比如 MD5, 算一次, 截成八段, 就是八个很好的Hash 函数了, 不一定要8个随机数产生器.)

2. 黑板报上说:

布隆过滤器决不会漏掉任何一个在黑名单中的可疑地址。但是,它有一条不足之处。也就是它有极小的可能将一个不在黑名单中的电子邮件地址判定为在黑 名单中,因为有可能某个好的邮件地址正巧对应个八个都被设置成一的二进制位。好在这种可能性很小。我们把它称为误识概率。在上面的例子中,误识概率在万分 之一以下。

实际上, 这说的就是 Bloom filter 不会有Flase Negative, 可能有 False Positive. 我们来算一下概率. 假设Hash 函数是理想的, 也就是说, 函数值是均一分布的, Bloom Filter 长为m bits, 那么, 对于一个输入, 某一位没被设置的概率是 1-/frac{1}{m}, 而我们一共有 k 个独立不相关的 Hash 函数, 所以这一位保持为 0 的概率应该是 (1-/frac{1}{m})^k. 因此, 假如我们一直插入了 n 个元素进来, 某一位是 0 的概率就是 (1-/frac{1}{m})^{kn}. 用 1 减去它, 就是这一位是 1 的概率了. 那么, 如果我们这时候开始测试元素是否在集合中而发生了错误, 就是说, 明明元素不在集合里面, 可是Hash 过后每一位都是 1, 这个的概率就是 /left(1-/left(1-/frac{1}{m}/right)^{kn}/right)^k /approx /left(1-e^{-kn/m}/right)^k. 这个题目中, m=16G, n=1G, k=8, 我算出来的错误率是0.0005744 (Linux Bash: echo “(1-e(-8*1/16))^8″|bc -l), 大于万分之一了. 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Bloom filter是一种数据结构,它具有可压缩性和高效查询性,因此在分布式数据库、网络缓存、对等网和信息检索等领域引起了越来越多的研究者关注。Bloom filter可以判断一个元素是否存在于一个集合中,而且在判断结果中不会出现漏判的情况,即如果Bloom filter判断一个元素不存在,则该元素一定不存在;但是如果Bloom filter判断一个元素存在,则该元素可能不存在(即存在一定的误判率)。 Bloom filter的应用场景非常广泛。例如,可以使用Bloom filter来解决Redis缓存穿透问题、邮件黑名单过滤、爬虫网址过滤、新闻推荐过滤等。在数据库方面,一些数据库如HBase、RocksDB和LevelDB等内置了Bloom filter,用于判断数据是否存在,从而减少数据库的IO请求。 Bloom filter的原理是基于位数组和多个哈希函数。它使用一个位数组来表示集合,初始时所有的位都被置为0。当要向Bloom filter中插入一个元素时,会将该元素经过多个哈希函数得到多个哈希值,并将对应位置的位设置为1。当要查询一个元素是否存在于Bloom filter中时,同样会经过多个哈希函数得到多个哈希值,并检查对应位置的位是否都为1。如果所有的位都为1,则认为该元素可能存在于集合中;如果至少一个位为0,则该元素一定不存在于集合中。 因此,Bloom filter是一种高效的数据结构,可以用于判断一个元素是否存在于一个集合中。虽然Bloom filter存在一定的误判率,但可以通过调整参数来降低误判率,并且在很多应用场景下具有很高的效率和性能优势。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Bloom Filter研究进展](https://download.csdn.net/download/weixin_38522323/14847831)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [布隆(Bloom Filter)过滤器——全面讲解,建议收藏](https://blog.csdn.net/qq_41125219/article/details/119982158)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值