学习一个东西首先要知道这个东西是什么,可以做什么,接着再了解这个东西有什么好处和优势,然后再学习他的工作原理。下面我们分别从这三点简单介绍一下bloom filter,以及和他的变种。
  1. What:在允许一定的错误率的情况下,用于判断一个元素是否属于一个集合,Bloom Filter可能会将一个不属于集合的元素误判为属于这个集合,即false positive。可以应用于检查一个URL是否已经被爬虫爬过、网络缓存共享、字符串匹配等等
  2. Why:时间和空间效率较高(与hash比较)
  3. How
    • 存储元素:用一个m位的数组和k个hash函数,对一个元素用k个hash函数映射出k个值(范围是(0~m-1),即数组下标),对数组的这m个下标位置为1
    • 查询元素:同上获得一个元素的m个下标位置,如果这m个下标位置都为1,说明元素属于该集合
    • 优点:时间、空间效率高,只需k次hash就能找到元素,只需m位空间大小,时间、空间复杂度都是常数
    • 缺点:有一定错误率、无法删除元素、无法恢复原来元素的值(因为不直接存储元素值)
  4. 从hash到bloom filter:
    1. 传统hash:

      • 存储元素:开辟h个格子,对集合中的每个元素,hash出格子的下标,将元素存于格子中。存在hash冲突的情况,用hash链表、再hash的方法解决。
      • 查找:hash出格子下标、同格子下标位置存储的元素值比较
      • 缺点:需要存储所有集合的值,空间占用大;遇到hash冲突需要再查找链表或者再hash,时间复杂度不确定
    2. 改进hash:
      1. 存储元素:开辟h个格子,对集合中的每个元素,hash出格子的下标,不直接存储元素的值,而是存储元素的编码,通常编码的位数比元素值的位数小,把元素值映射成新的编码(hash)可能会有冲突(不同元素的编码相同)
      2. 查找:同传统hash
      3. 优点:较传统hash空间复杂度低
      4. 缺点:存在一定的错误率,用正确率换取空间;无法恢复原来元素的值
    3. bloom filter:
      1. 存储和查找童第3点
      2. 优点:不用考虑冲突的情况,因为允许一定的错误率,时空效率高
  5. Bloom Filter的变种
    1. Counting Bloom Filter:原始的bloom filter不支持删除操作,CBF通过对位数组进行扩展,把原来1位扩展为t位用于计数。每次存储时将对应k个hash下标的位计数+1,删除时相应的对k个hash下标计数-1,从而支持集合删除操作
    2. Partial Bloom Filter: 原始bloom filter的hash函数值的范围是0~m-1,即整个位数组的下标范围,而在PBF中每个hash函数的取值范围较小,相互间没有交集,位数组被分成 k个区域,每个hash函数值负责一个区域。好处是准确率比原始的高,且可以并行访问数组,优化程序性能
    3. Compressed Bloom Filter:对原始的bloom filter进行压缩,用于网络传输应用。好处是经过压缩的bloom filter的错误率更低、所需位数更少、所需hash函数更少

Bloom Filter的基本原理和变种相关推荐

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

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

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

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

  3. C++拾取——Linux下实测布隆过滤器(Bloom filter)和unordered_multiset查询效率

    布隆过滤器是一种判定元素是否存在于集合中的方法.其基本原理是使用哈希方法将数据映射到一个很长的向量上.在维基百科上,它被称为"空间效率和查询时间都远远超过一般的算法"的方法.由于它 ...

  4. Bloom Filter:海量数据的HashSet

    Bloom Filter一般用于数据的去重计算,近似于HashSet的功能:但是不同于Bitmap(用于精确计算),其为一种估算的数据结构,存在误判(false positive)的情况. 1. 基本 ...

  5. HBase总结(九)Bloom Filter概念和原理

    Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合.Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某 ...

  6. java 布隆过滤器_什么是布隆过滤器(Bloom Filter)?

    在日常工作中,有一个比较常见的需求,就是需要判断一个元素是否在集合中. 例如以下场景: 给定一个IP黑名单库,检查指定IP是否在黑名单中? 在接收邮件的时候,判断一个邮箱地址是否为垃圾邮件? 在文字处 ...

  7. 利用bloom filter算法处理大规模数据过滤

    Bloom Filter是由Bloom在1970年提出的一种快速查找算法,通过多个hash算法来共同判断某个元素是否在某个集合内.可以用于网络爬虫的url重复过滤.垃圾邮件的过滤等等. 它相比hash ...

  8. 比 Bloom Filter 节省25%空间!Ribbon Filter 在 Lindorm中的应用

    1 前言 Lindorm是一个低成本高吞吐的多模数据库,目前,Lindorm是阿里内部数据体量最大,覆盖业务最广的数据库产品.超高的性能和低RT一直是Lindorm追求的目标,因此Lindorm也在不 ...

  9. 比 Bloom Filter 节省25%空间!Ribbon Filter 在 Lindorm 中的应用

    1 前言 Lindorm是一个低成本高吞吐的多模数据库,目前,Lindorm是阿里内部数据体量最大,覆盖业务最广的数据库产品.超高的性能和低RT一直是Lindorm追求的目标,因此Lindorm也在不 ...

  10. Bloom Filter(布隆过滤器)

    一.介绍 Bloom Filter是一个有m bits的bit array,每一个bit位都初始化为0.并且定义有k个不同的hash function,每个都以uniform random distr ...

最新文章

  1. Flask环境的配置
  2. 如何用c语言打出 * * * * * * * * * * * * *?
  3. 从IoT World 2019看全球IoT九大发展趋势
  4. Verdi GUI技能操作-Application Tutorials部分
  5. 使用Talend Open Studio将数据分步从oracle导入到hive中
  6. 滑动轮播_这样运营轮播图可以增加订单
  7. 小打卡基于阿里云构建企业级数仓的实践及总结
  8. linux逻辑卷管理
  9. Unity3D基础34.1:打砖块小游戏优化
  10. python数据分析系列教程——Pandas全解
  11. 定时任务:java 中Timer 和 TimerTask 的使用
  12. 关于man命令后面加数字
  13. C# 如何添加PPT背景(纯色背景、渐变色背景、图片背景)
  14. 国内高防云服务器哪家好?选高防云服务器必看
  15. botzone Tetris2
  16. RTL设计与编码指导
  17. android逆向分析腾讯微视研究无限循环视频嵌套滑动不中断的实现方式
  18. matlab的omega0是什么,【铁虫】我喜欢的Omega被别人标记了怎么办(内有嘟嘟)
  19. 20个国内Android平台移动应用市场
  20. build tools

热门文章

  1. saetv2.ex.class.php,curl out of memory window下PHP调用curl报内存不够
  2. js中this的用法
  3. css中的一些选择器的用法总结
  4. C#4.0的十种语法糖
  5. 小白初学Vue之 组件与实例的关系 初试篇
  6. 在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。)...
  7. BST树、B树、B+树、B*树
  8. 【IBM Tivoli Identity Manager 学习文档】14 TIM组织结构设计
  9. Lambda表达式基础
  10. uni-app 跨端开发注意事项