布隆过滤器用于测试某一元素是否存在于给定的集合中,是一种空间利用率很高的随机数据结构(probabilistic data structure),存在一定的误识别率(false positive),即布隆过滤器报告某一元素存在于某集合中,但是实际上该元素并不在集合中,但是没有错误识别的情形(false negative),即如果某个元素确实没有在该集合中,那么布隆过滤器是不会报告该元素存在于集合中的,没有漏报的情形出现,召回率为百分之百。
 
算法描述
 
布隆过滤器实际上是一个位数组,元素数目为m,初始状态全部为0,还需要k个不同的哈希函数,每个哈希函数必须保证以统一的随机分布算法将给定的元素映射到位数组的某个位置上(1~m)。
 
添加元素至布隆过滤器中时,布隆过滤器并不会实际保存该元素数据,而是将该元素通过k个不同的哈希函数分别映射为k个位数组位置(1~m),然后将位数组对应k个位置的值设为1,此时表示该元素已存在于“集合”中。
 
检查元素是否存在于“集合”中时,同样将该元素通过k个不同的哗然函数映射为位数组的k个位置(1~m),如果位数组中某个位置对应的值为0,表示该元素不存在于“集合中”;如果位置中的这些位置对应的值全部为1,则有两种情况:
 
(1)该元素存在于“集合”中
(2)发生错误识别(false positive),即该元素实际并不存在于“集合”中
 
在一个简单布隆过滤器的实现中是没有方法可以区别这两种情况的。
 
如上图所示,布隆过滤器的位数组大小为18,哈希函数个数为3,集合中一共有三个元素{x,y,z},分别被映射到位数组上的不同位置(每个集合元素的映射由位数组上的有一个位置(值)表示)。现在判断元素w是否存在于该集合中,首先通过布隆过滤器的3个哈希函数得到位数组中三个位置坐标,然后判断位数组中这三个位置上的值是否全为1,由上图可知,有一个位置的对应值不为1,因此元素w不存在于该集合中。
 
简单布隆过滤器(位数组只有0和1两种状态)的实现不支持从集合中删除元素,因为删除元素意味着将位数组相应位置(由元素值通过哈希函数得出)的值全部置为0,但是简单布隆过滤器没有方法判断这些位置(值)是否被集合中的其它元素所使用,如果将正在被其它元素所使用的位置(值)置为0则会导致false negative出现,即元素实际存在于集合中,布隆过滤器却报告不存在。
 
关键实现
 
简单布隆过滤器实现涉及三个重要属性:位数组、哈希函数、误识别率。
 
假设位数组大小为m、集合元素数组为n、哈希函数个数为k、误识别率为p,则有以下公式:
 
以上关于布隆过滤器的介绍仅限于简单布隆过滤器,复杂实现及相应公司推导请参数http://en.wikipedia.org/wiki/Bloom_filter。

Bloom Filter(布隆过滤器)的更多相关文章

  1. Bloom Filter 布隆过滤器

    Bloom Filter 是由伯顿.布隆(Burton Bloom)在1970年提出的一种多hash函数映射的快速查找算法.它实际上是一个很长的二进制向量和一些列随机映射函数.应用在数据量很大的情况下 ...

  2. 【转】Bloom Filter布隆过滤器的概念和原理

    转自:http://blog.csdn.net/jiaomeng/article/details/1495500 之前看数学之美丽,里面有提到布隆过滤器的过滤垃圾邮件,感觉到何其的牛,竟然有这么高效的 ...

  3. 海量信息库,查找是否存在(bloom filter布隆过滤器)

    Bloom Filter(布隆过滤器) 布隆过滤器用于测试某一元素是否存在于给定的集合中,是一种空间利用率很高的随机数据结构(probabilistic data structure),存在一定的误识 ...

  4. Bloom Filter布隆过滤器原理和实现(1)

    引子 <数学之美>介绍布隆过滤器非常经典: 在日常生活中,包括设计计算机软件时,经常要判断一个元素是否在一个集合中.比如: 在字处理软件中,需要检查一个英语单词是否拼写正确(也就是要判断它 ...

  5. Bloom Filter(布隆过滤器)的概念和原理

    Bloom filter 适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集 基本原理及要点: 对于原理来说很简单,位数组+k个独立hash函数.将hash函数对应的值的位数组置1,查找时 ...

  6. 硬核 | Redis 布隆(Bloom Filter)过滤器原理与实战

    在Redis 缓存击穿(失效).缓存穿透.缓存雪崩怎么解决?中我们说到可以使用布隆过滤器避免「缓存穿透」. 码哥,布隆过滤器还能在哪些场景使用呀? 比如我们使用「码哥跳动」开发的「明日头条」APP 看 ...

  7. 大数据处理算法--Bloom Filter布隆过滤

    1. Bloom-Filter算法简介 Bloom-Filter,即布隆过滤器,1970年由Bloom中提出.它可以用于检索一个元素是否在一个集合中. Bloom Filter(BF)是一种空间效率很 ...

  8. 浅谈布隆过滤器Bloom Filter

    先从一道面试题开始: 给A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL. 这个问题的本质在于判断一个元素是否在一个集合中.哈希表以O(1) ...

  9. 布隆过滤器 Bloom Filter 2

    date: 2020-04-01 17:00:00 updated: 2020-04-01 17:00:00 Bloom Filter 布隆过滤器 之前的一版笔记 点此跳转 1. 什么是布隆过滤器 本 ...

  10. 布隆过滤器redis缓存

    Bloom Filter布隆过滤器算法背景如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定.链表.树.散列表(又叫哈希表,Hash table)等等数据结构 ...

随机推荐

  1. android抓包工具

    下载 http://gdown.baidu.com/data/wisegame/2158469c63492e89/Tcpzhuabao_2.apk

  2. 用PHP迭代器来实现一个斐波纳契数列(转)

    斐波纳契数列通常做法是用递归实现,当然还有其它的方法.这里现学现卖,用PHP的迭代器来实现一个斐波纳契数列,几乎没有什么难度,只是把类里的next()方法重写了一次.注释已经写到代码中,也是相当好理解 ...

  3. jquery中修改一个元素的值或内容

    jquery中修改一个元素的值或内容,比如数值增加可以使用这个方法取得原值并+1 $this.text(function(i,ot){return Number(ot)+1;});

  4. android strings.xml转义字符, 注意细节解决(转)

    XML转义字符 以下为XML标志符的数字和字符串转义符 "     (" 或 ") '     (' 或 &apos;) &     (& 或 & ...

  5. datagrid加下拉列表dropdownlist

    datagrid中代码: <asp:datagrid id="dgList" runat="server" ItemStyle-HorizontalAli ...

  6. call, apply, bind作用

    call, apply作用就是(改变方法中的this指向)借用别人的方法来调用,就像调用自己的一样 function Person(name) { this.name = name; } Person ...

  7. HTML5 离线缓存忽略主页实例

    默认情况下 指定html mianfest的当前页面会自动离线缓存到客户端. 取消的方法,可以使用iframe类实现 1.主页定义: <iframe frameborder="no&q ...

  8. SQLServer2008收缩数据库日志

    -- Set to SIMPLE mode ALTER DATABASE [DATABASE_NAME] SET RECOVERY SIMPLE; -- Shrink the db ); -- Set ...

  9. HTTP协议是什么?(及get和post请求的区别)

    http://blog.csdn.net/xiemk2005/article/details/6108618 http://blog.csdn.net/mengleigaocong/article/d ...

  10. 用java写bp神经网络(一)

    根据前篇博文<神经网络之后向传播算法>,现在用java实现一个bp神经网络.矩阵运算采用jblas库,然后逐渐增加功能,支持并行计算,然后支持输入向量调整,最后支持L-BFGS学习算法. ...