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. 【单片机】基于有方GPRS的智能电梯控制系统

    前一篇文章<时钟及温度的显示>中所介绍的作品,是作为一个单片机新手在暑假学了一个月的单片机之后,做的第一个综合性作品,涵盖了二极管.蜂鸣器.数码管.液晶屏.按键.时钟芯片.温度传感器的控制 ...

  2. LeetCode之“链表”:Intersection of Two Linked Lists

    此题扩展:链表有环,如何判断相交? 参考资料: 编程判断两个链表是否相交 面试精选:链表问题集锦 题目链接 题目要求: Write a program to find the node at whic ...

  3. PS图层混合算法之三(滤色, 叠加, 柔光, 强光)

    滤色模式: 作用结果和正片叠底刚好相反,它是将两个颜色的互补色的像素值相乘,然后除以255得到的最终色的像素值.通常执行滤色模式后的颜色都较浅.任何颜色和黑色执行滤色,原色不受影响;任何颜色和白色执行 ...

  4. Media Player Classic - HC 源代码分析 4:核心类 (CMainFrame)(3)

    ===================================================== Media Player Classic - HC 源代码分析系列文章列表: Media P ...

  5. MinHash 原理

    最小哈希原理介绍 MinHash是基于Jaccard Index相似度(海量数据不可行)的算法,一种降维的方法A,B 两个集合:A = {s1, s3, s6, s8, s9}  B = {s3, s ...

  6. iOS 百度地图计算两个点时间的距离

    最近在解项目bug,更新地位城市的时候有个错误,后来想在位置改变多少距离之后,再取更新位置,这个功能去年做过.但是又忘记了! 所以还是记录一下吧. 百度地图提供了一个方法: BMKMapPointFo ...

  7. ZeroC Ice Ice Registry实现负载均衡

    Registry介绍         对于多个IceBox集群该怎么负载均衡?以服务注册表Registry为依托的Service Locator组件,以及依赖其而诞生的强大的分分布式框架-IceGri ...

  8. masm的一些常用编译选项

    ml命令行选项: /Dsymbol[=value] 定义给定名称的文本宏 /Fl 生成lst文件 /Sn lst文件中关闭符号表 /I 设置include文件的路径 /link 发送给link的连接器 ...

  9. obj-c编程16:键值编码(KVC)

    我们可以借助obj-c中的键值编码(以后简称KVC,Key-Value Coding)来存取类的属性,通过指定所要访问的属性名字符串标示符,可以使用存取器方法来获取或设置类的属性.下面的例子,借助于K ...

  10. SAP BADI的“多次使用”(multiple use)

    SAP中的某些BADI是不允许多用(multiple use)的,即不能同时存在多个活动的增强实施类.如下图中的这种,无论为其创建多少个实施类,都只有活动的那一个会被触发: tips : 业务加载项定 ...