bloom filter入门介绍

布隆滤波器是由布隆在1970年提出的。
主要功能
它实际上是由一个很长的二进制向量和一系列随机hash函数组成,布隆滤波器可以用于检索一个元素是否在一个集合内。(判断元素是否在集合和去重问题)
bloom filter的优点&缺点
优点:
它的空间效率和查询时间都远远超过一般的算法。
缺点:
有一定的误识别率。(假正例Falsepositives,假反例Falsenegatives)
对于缺点的策略
为了减小误判的几率,可依让bitmap的空间更大一些,单个url所做的hash更多一些(一般是8次),总之是在空间和准确率上作出取舍。
如果让每一个hash算法的结果对应一个独立的bitmap呢?
这样的话,占用的空间会相应的增加几倍,反而不如用hashset。

常用的应用场合有:
1.判断一个email地址是否在黑名单中
2.在网络爬虫中判断一个url是否已经存在于待抓取列表或者已抓取(采用hash表 存储这些url会耗费大量的内存以至于在实际中几乎不可用)
3.视频库的去重

bloom filter的构成和操作(添加、查询)
布隆滤波器会有一个m位的bit数组(每位初始设为0)以及k个随机hash函数,每个hash函数的输出都是一个(0,m-1)之间的一个数(对于bit数组下标)。
添加操作:
输入x,对于每一个hash函数,计算j=hi(x),将m_bit[j]设为1;
查询操作:
输入x,对于每一个hash函数,计算j=hi(x),如果m_bit[j]不等于1,则说明x不在集合中,否则如果k个函数的映射为都为1,说明x存在于集合中。

总结
bloom filter是利用很小的错误率代价完美的实现了海量数据下的去重和判断问题。

关于假正例Falsepositives和假反例Falsenegatives的介绍:
假正例:识别错误,误判断某一元素在集合中,实际上不在。和删除困难。
假反例:没有识别错误。

关于False positive的推导:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值