Bloom Filter(布隆过滤器)

布隆过滤器用于测试某一元素是否存在于给定的集合中,是一种空间利用率很高的随机数据结构(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。
 
 
参考:http://www.cnblogs.com/yurunmiao/p/4150527.html

海量信息库,查找是否存在(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 适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集 基本原理及要点: 对于原理来说很简单,位数组+k个独立hash函数.将hash函数对应的值的位数组置1,查找时 ...

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

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

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

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

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

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

  7. 浅谈布隆过滤器Bloom Filter

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

  8. 布隆过滤器 Bloom Filter 2

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

  9. 布隆过滤器redis缓存

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

随机推荐

  1. JSP判断移动设备

    日期: 2014年3月6日 人员::铁锚 看到了一篇很好的文章, <在天猫,前端做什么?>,里面有天猫php判断移动设备的正则(个人猜测),觉得很好用,于是就决定移植到JSP里面. jsp ...

  2. 报表打印错误:Forcing NLS_NUMERIC_CHARACTERS to: '.,' for XDO processing

    HDSP0004 module: HDSP: 凭证打印 +----------------------------------------------------------------------- ...

  3. laydate日期空间与时间选择器

     http://laydate.layui.com/

  4. Linux的常用命令(2) - 关机

    关机命令 shutdown‑h now 立即进行关机 shutdown‑r now 现在重新启动计算机 -t sec : -t后面加秒数,即"过几秒后关机" -k      : 不 ...

  5. Android高级控件(二)——SurfaceView实现GIF动画架包,播放GIF动画,自己实现功能的初体现

    Android高级控件(二)--SurfaceView实现GIF动画架包,播放GIF动画,自己实现功能的初体现 写这个的原因呢,也是因为项目中用到了gif动画,虽然网上有很多的架包可以实现,不过我们还 ...

  6. Shell Scripts - 循环while,until,for

    while...do...done until...do...done for...do...done

  7. MongoDB之整库备份还原单表collection备份还原

    MongoDB之整库备份还原单表collection备份还原 cd D:\MongoDB\bin 1整库备份: mongodump -h dbhost -d dbname -o dbdirectory ...

  8. 超高速前端开发工具——Emmet

    [由于 CSDN 不支持富文本编辑器写的文章迁移到 Markdown 编辑器中修改,已重发了一个重新排版的版本, 新版链接:http://blog.csdn.net/ys743276112/artic ...

  9. Oracle 中Return 和exit的区别

    在Oracle存储过程中,使用Return 时,如果执行到Return语句,会跳出整个语句(如果是循环,会跳出整个循环),将不再执行,也就是结束了整个存储过程. 下面就用一个例子来说明一下 ,这个存储 ...

  10. 在Mac中使用「dd」指令烧录ISO镜像文件到U盘

    作者:超級efly   發布:2014-07-26 20:22   分類:電腦   閱讀:442   11條評論    大家在Windows系統下可以方便的使用UltraISO程式來燒錄「.ISO」, ...