高阶系统设计优化-----Bloom Filter

本文介绍了Bloom Filter如何帮助解决高阶系统设计中的优化问题,特别是在微信乘车码活动统计中的应用场景。Bloom Filter通过多个哈希函数映射至位数组,节省空间,用于判断元素是否存在,但存在一定的误判率。文章还探讨了其优势,如空间效率和快速查询,并提及了Counting Bloom Filter作为其升级版,解决了频率统计和元素删除的问题。
摘要由CSDN通过智能技术生成

高阶系统设计优化-----Bloom Filter

前传

Alice 是一位事业有成,相貌出众,且身材管理非常得当的优秀女企业家,但随着Alice的年纪越来越大,家里催婚的声音也越来越频繁。直到有一天Alice在电音节上认识了当地的真命天子,但是酒醉的她没有来的及记住他的电话号码,只来的及记住他的名字,叫 William。好在Alice 幸运值max,已经拿到了一串可能的名单和当时参加的电音节名单,但是一个个找是在是太耗费精力了。所以Alice开始寻求我们程序猿的帮助,看看怎么在最短的时间的时间内找到名单上的电话号码是否有出现在当天的电音节名单当中

布隆过滤器

介绍

布隆过滤器是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。

布隆过滤器的重要组成

布隆过滤器本质上是一个位数组,我们通过把一个哈希函数数组与添加值分别做哈希,并把映射到的位数组中的位分别置为1,来判断一个元素是否一定不存在
以下就是一个高度抽象的布隆过滤器:
在这里插入图片描述
该布隆过滤器有三个哈希函数(因为对应的每个待插入元素都有三个出箭头),每一个元素经过三次哈希函数的映射,都会映射到下面的位数组里面,比如x元素,经过三次哈希函数的映射,就会映射到位数组的第2位,第6位,第14位

映射到位数组代表的含义

比如上面举例的x元素,经过三次哈希函数的映射,就会映射到位数组的第2位,第6位,第14位这到底代表什么意思呢?我们可以认为是如果一个元素w到来,我们判断出他在位数组里第2位,第6位,第14位都为1,那么:

  • 它可能是x(因为和x在数组中都有相同的置为1的位置)
  • 也可能是别的元素(和x一样在数组中都有相同的置为1的位置的元素也是有可能存在的吧?哈希冲突的基本概念)
  • 但如果有一位不是1,那它一定不是x(这个很好理解吧?不同的值可能哈希结果相同,但一个值绝对不可能有两个哈希结果)

所以,如果2,6,14中任意一个位置存在0那么w一定不是x

源代码分析

说了那么多general的东西,我们参照布隆过滤器的代码,来看一下基本的布隆过滤器是如何实现的
首先来看看布隆过滤器的结构体定义(已附上解释说明)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值