布鲁姆过滤器

布隆过滤器是一种数据结构,快速和节省内存,能用于判定一个元素是否存在于一个集合中
这种效率的代价是Bloom filter是一种概率数据结构,元素不是绝对的在组里或可能在组里。

Bloom filter的基本数据结构是一个位向量。


                                            图1:布鲁姆过滤器散列图

如图1:布鲁姆过滤器,由一个长度为m(=18)的数组(初始值都为0)和k(=3)个hash 函数组成,图中的元素x,y,z,判断为“可能”存在于集合中;而元素w一定不在集合中。由于元素x,y,z通过k个hash函数计算后,发现对应的桶中的元素都是1。而w计算后在15号桶为0。

添加元素:将一个元素添加到Bloom Filter中,只需要计算k个hash函数,并将散列的位置都置为1。(因此多个元素,散列到同一个桶中是有可能的)

删除元素:对于simple BF由于多个元素,散列到同一个桶中是有可能的,一个桶值为1不代表这个桶只表示某单个元素的散列信息,可能有其他的元素也散列到这个桶。因此,无法进行删除操作。(增加一个BF存储删除的元素,完成删除操作)

假阳性率:当m和k足够大,或者选取的hash函数足够好的时候,一个元素如果不在集合中,通过hash计算时,得到的值很可能为0(冲突变小),假阳性率越低。当假阳性率太高,会导致很多无效的读取磁盘操作,会很浪费时间。因此,当假阳性率太高时,需要重构BF。

时间和空间分析:添加,删除,查找都为O(k)。对于m长的BF,有n个元素,k个hash函数。当k值取最优时,对于1%假阳性,每个元素只需要消耗9.6bits。每个元素增加4.8bits可以完全解决1%假阳性问题。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值