文章目录

  • 布隆过滤器介绍
  • 布隆过滤器原理
  • 布隆过滤器的优缺点与用途
  • 布隆过滤器使用场景

布隆过滤器介绍

布隆过滤器(Bloom Filter)由 Burton Howard Bloom 在 1970 年提出,是一种空间效率高的概率型数据结构。它专门用来检测集合中是否存在特定的元素。

布隆过滤器带有以下特点:

  • 一个很长的二进制向量(位数组)
  • 一系列随机函数(哈希)
  • 空间效率和查询效率高
  • 有一定的误判率(哈希表是精确匹配)

布隆过滤器原理

布隆过滤器(Bloom Filter)的核心是实现一个超大的位数组和几个哈希函数

    假设位数组的长度为m,哈希函数的个数为k,以上图为例。
具体操作流程如下:

  1. 假设集合里面有3个元素 {x,y,z},哈希函数的个数为3。首先将位数组进行初始化,将里面每个位都设置为0。
  2. 对于集合里面的每一个元素,将元素依次通过3个哈希函数进行映射,每次映射都会产生一个哈希值,这个值对应位数组上面的一个点,然后将位数组对应的位置标记为1。
  3. 查询 W 元素是否存在集合中的时候,同样的方法将 W 通过哈希映射到位数组上的3个点。
  4. 如果3个点的其中有一个点不为1,则可以判断该元素一定不存在集合中。 反之,如果3个点都为1,则该元素可能存在集合中。
  5. 注意:此处不能判断该元素是否一定存在集合中,可能存在一定的误判率。
  6. 可以从图中可以看到:假设某个元素通过映射对应下标为4、5、6这3个点。虽然这3个点都为1,但是很明显这3个点是不同元素经过哈希得到的位置,因此这种情况说明元素虽然不在稽核中,也可能对应的都是1,这是误判率存在的原因。

布隆过滤器添加元素

  • 将要添加的元素给k个哈希函数
  • 得到对应于位数组上的k个位置
  • 将这k个位置设为1

布隆过滤器查询元素

  • 将要查询的元素给k个哈希函数
  • 得到对应于位数组上的k个位置
  • 如果k个位置有一个为0,则肯定不在集合中
  • 如果k个位置全部为1,则可能在集合中

布隆过滤器的优缺点与用途

优点

  • 不需要存储数据本身,只用比特表示,因此空间占用相对于传统方式有巨大的优势,并且能够保密数据;
  • 时间效率也较高,插入和查询的时间复杂度均为O(k);
  • 哈希函数之间相互独立,可以在硬件指令层面并行计算。

缺点

  • 存在假阳性的概率,不适用于任何要求 100% 准确率的场景;
  • 只能插入和查询元素,不能删除元素,这与产生假阳性的原因是相同的。我们可以简单地想到通过计数(即将一个比特扩展为计数值)来记录元素数,但仍然无法保证删除的元素一定在集合中。

所以,Bloom Filter 在对查准度要求没有那么苛刻,而对时间、空间效率要求较高的场合非常合适,本文第一句话提到的用途即属于此类。另外,由于它不存在 假阴性 问题,所以用作“不存在”逻辑的处理时有奇效,比如可以用来作为 缓存系统(如Redis)的缓冲,防止缓存穿透。

布隆过滤器使用场景

HBase学习笔记(三)——布隆过滤器(Bloom Filter)的原理相关推荐

  1. mysql布隆过滤器源码_布隆过滤器(Bloom Filter)的原理和实现

    什么情况下需要布隆过滤器? 先来看几个比较常见的例子 字处理软件中,需要检查一个英语单词是否拼写正确 在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上 在网络爬虫里,一个网址是否被访问过 yahoo, ...

  2. js 数组 实现 完全树_Flink实例(六十八):布隆过滤器(Bloom Filter)的原理和实现 - 秋华...

    什么情况下需要布隆过滤器? 先来看几个比较常见的例子 字处理软件中,需要检查一个英语单词是否拼写正确 在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上 在网络爬虫里,一个网址是否被访问过 yahoo, ...

  3. 布隆过滤器(Bloom Filter)的原理和实现

    布隆过滤器使用场景 之前在<数学之美>里面看到过布隆过滤器的介绍.那么什么场景下面需要使用布隆过滤器呢? 看下下面几个问题 字处理软件中,需要检查一个英语单词是否拼写正确 在 FBI,一个 ...

  4. 布隆过滤器速度_布隆过滤器(Bloom Filter)详解

    布隆过滤器[1](Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的.它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元 ...

  5. 布隆过滤器+布隆过滤器(Bloom Filter)详解

    布隆过滤器+布隆过滤器(Bloom Filter)详解 程序 = 数据结构 + 算法 -- 图灵奖得主,计算机科学家N.Wirth(沃斯) A Bloom filter is a space effi ...

  6. Redis缓存穿透“新杀招“:布隆过滤器Bloom Filter

    场景分析 这篇文章来讲述缓存穿透的补充解决方案. 为什么要用补充来形容呢? 在之前的文章中,我们提到缓存穿透的解决方案时,我是这么说的: 关于缓存穿透,我们可以在用户访问数据库后将null值存入Red ...

  7. 布隆过滤器(Bloom Filter)详解——基于多hash的概率查找思想

    转自:http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html   布隆过滤器[1](Bloom Filter)是由布隆(Burton ...

  8. 布隆过滤器(Bloom Filter)原理及优缺点剖析

    直观的说,bloom算法类似一个hash set,用来判断某个元素(key)是否在某个集合中. 和一般的hash set不同的是,这个算法无需存储key的值,对于每个key,只需要k个比特位,每个存储 ...

  9. 布隆过滤器Bloom Filter简介

    背景: 如果在平时我们要判断一个元素是否在一个集合中,通常会采用查找比较的方法,下面分析不同的数据结构查找效率: 采用线性表存储,查找时间复杂度为O(N) 采用平衡二叉排序树(AVL.红黑树)存储,查 ...

最新文章

  1. FLAS: fast and high-throughput algorithm for PacBio long-read self-correction FLAS:快速、高通量的PacBio lon
  2. c语言仪器仪表课程设计,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  3. error LNK2026: 模块对于 SAFESEH 映像是不安全的(转)
  4. 【转】DICOM文件格式剖析(初识)
  5. 密码与安全新技术总结
  6. antdesign 柱状图_以Ant Design为例:看B端设计的基本套路
  7. Mysql多源复制半同步_MySQL多源复制搭建
  8. 少儿C++编程如何入门
  9. 【智能制造】智能制造能力成熟度评测三部曲
  10. ImageAI (二) 使用Python快速简单实现物体检测 Object Detection
  11. srvany把程序作为Windows服务运行
  12. XYplorer设置-右键新建word文档或者md文档
  13. Contrastive Model Inversion for Data-Free Knowledge Distillation
  14. [Oracle] 自定义数据类型Type
  15. Camera | 4.瑞芯微平台MIPI摄像头应用程序编写
  16. canvas-球体动画运动
  17. 美国全国就业普遍低迷“技术”就业却加速增长;爱立信发布2030年10大消费者趋势 | 美通社头条...
  18. 提高沟通表达能力该看什么书?有哪些沟通书籍值得推荐?
  19. 数字IC设计的一些英语术语总结
  20. 【实拍】YASA高密度电机技术分析

热门文章

  1. 搜索web搜索引擎_Web设计师的20个最佳图标搜索引擎
  2. MBA 工商管理硕士适合哪些人考?
  3. 软件设计师——多媒体基础 [ 笔记 ]
  4. js单线程和异步,promise给的承诺
  5. cat - EOF标志的使用
  6. Centos7 安装KVM
  7. 苹果ppt_爆料!苹果9月16日发布会,iPhone 12新机提前感受!
  8. 起点爬虫爬取全部书籍
  9. android 模仿qq 上传头像,Android 仿qq上传头像(一)
  10. nodejs——vscode新建js项目