从前面几篇对Bloom Filter的介绍可以看出,标准的Bloom Filter是一种很简单的数据结构,它只支持插入和查找两种操作。在所要表达的集合是静态集合的时候,标准Bloom Filter可以很好地工作,但是如果要表达的集合经常变动,标准Bloom Filter的弊端就显现出来了,因为它不支持删除操作。

Counting Bloom Filter的出现解决了这个问题,它将标准Bloom Filter位数组的每一位扩展为一个小的计数器(Counter),在插入元素时给对应的k(k为哈希函数个数)个Counter的值分别加1,删除元素时给对应的k个Counter的值分别减1。Counting Bloom Filter通过多占用几倍的存储空间的代价,给Bloom Filter增加了删除操作。下一个问题自然就是,到底要多占用几倍呢?

我们先计算第i个Counter被增加j次的概率,其中n为集合元素个数,k为哈希函数个数,m为Counter个数(对应着原来位数组的大小):


上面等式右端的表达式中,前一部分表示从nk次哈希中选择j次,中间部分表示j次哈希都选中了第i个Counter,后一部分表示其它nk – j次哈希都没有选中第i个Counter。因此,第i个Counter的值大于j的概率可以限定为:


上式第二步缩放中应用了估计阶乘的斯特林公式:


在Bloom Filter概念和原理一文中,我们提到过k的最优值为(ln2)m/n,现在我们限制k ≤ (ln2)m/n,就可以得到如下结论:


如果每个Counter分配4位,那么当Counter的值达到16时就会溢出。这个概率为:


这个值足够小,因此对于大多数应用程序来说,4位就足够了。

关注下方公众号获取更多好文

Counting Bloom Filter相关推荐

  1. 大数据量下的集合过滤—Bloom Filter

    算法背景 如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定.链表.树.散列表(又叫哈希表,Hash table)等等数据结构都是这种思路,存储位置要么是磁盘 ...

  2. 布隆过滤器Bloom Filter简介

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

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

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

  4. 【转】从哈希存储到Bloom Filter

    http://blog.csdn.net/jiaomeng/archive/2007/01/28/1496329.aspx 从哈希存储到Bloom Filter 焦萌 2007年1月28日 先解释一下 ...

  5. Bloom Filter算法

    一.概念 Bloom Filter的中文翻译叫做布隆过滤器,是1970年由布隆提出的.它实际上是一个很长的二进制向量和一系列随机映射函数.布隆过滤器可以用于检索一个元素是否在一个集合中.它的优点是空间 ...

  6. 【guava】大数据量下的集合过滤—Bloom Filter

    1.概述 转载防丢失,请看原文 算法背景 相似文章:Bing搜索核心技术BitFunnel原理 如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定.链表.树. ...

  7. 布隆过滤器(Bloom Filter)- 原理、实现和推导

    目录 算法背景 布隆过滤器–概念 布隆过滤器-原理 布隆过滤器-缺点 布隆过滤器-实现 布隆过滤器-应用 布隆过滤器-公式推导 算法背景 问题: 在开发中,经常要判断一个元素是否在一个集合中. 实现方 ...

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

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

  9. 海量数据处理算法—Bloom Filter

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

  10. Hbase_Hbase 中 bloom filter 的设计与概念

    Hbase 中使用了大名鼎鼎的 bloom filter,   我们来学习一下 bloom filter. 原文地址: https://www.cnblogs.com/zhxshseu/p/52898 ...

最新文章

  1. jQuery复选框选中状态更改事件
  2. 从微信红包的春节活动运营方案中,必读的运营策略
  3. Curses 中的 noecho() 函数
  4. SX1301吞吐量是SX1276/8的多少倍?
  5. 【转】【C#】使用fo-dicom完成BMP,JPG,PNG图片转换为DICOM文件
  6. 平衡二叉树、二叉排序树-数据结构
  7. v-for 获取数组key value_Vue之路 | 05von、vif、vfor
  8. Spring Boot基础学习笔记24:RabbitMQ安装以及整合环境搭建
  9. 小程序开发好学吗?需要掌握哪些知识技能?
  10. RedisTemplate存数据时指定过期时间
  11. 排序算法之——归并排序分析
  12. 2021-06-13并发线程控制方法3种
  13. 文远知行公布自动驾驶运营路线图:全新升级自动驾驶方案,建立500辆规模的自动驾驶车队...
  14. 发那科机器人寄存器Ar_浅谈发那科机器人与TP参数之间的关系
  15. MySQL字符串的拼接方法
  16. 使用highEcharts做出中国地图的效果图
  17. 批量替换角标,为角标添加中括号
  18. 线上引流方法有哪些?怎么做线上引流推广?线上引流推广方法
  19. PhishTank恶意URL数据集分享
  20. 思科1832I/1852I/2802/3802无线AP卡死不通电无射频故障维修

热门文章

  1. C++Pollard_rho分解质因数及其例题—————Prime Test
  2. matlab有LLG方程的解么,matlab在常微分方程数值解中应用.docx
  3. 阴阳师2017 7服务器维护,《阴阳师》手游4月17日维护更新公告
  4. Error: Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist: No URLs
  5. 【安装windows10 RTX3090 tensorflow的开发环境】
  6. linux挂载镜像iso文件作为yum源
  7. 最全搭建自己的SOCKS代理服务器
  8. js 对象拼接的方法 数组 Map Set
  9. Flask蓝本与子域名
  10. (三)洞悉linux下的Netfilteramp;iptables:内核中的rule,match和target