Counting Bloom Filter
从前面几篇对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相关推荐
- 大数据量下的集合过滤—Bloom Filter
算法背景 如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定.链表.树.散列表(又叫哈希表,Hash table)等等数据结构都是这种思路,存储位置要么是磁盘 ...
- 布隆过滤器Bloom Filter简介
背景: 如果在平时我们要判断一个元素是否在一个集合中,通常会采用查找比较的方法,下面分析不同的数据结构查找效率: 采用线性表存储,查找时间复杂度为O(N) 采用平衡二叉排序树(AVL.红黑树)存储,查 ...
- Bloom Filter(布隆过滤器)的概念和原理
Bloom filter 适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集 基本原理及要点: 对于原理来说很简单,位数组+k个独立hash函数.将hash函数对应的值的位数组置1,查找时 ...
- 【转】从哈希存储到Bloom Filter
http://blog.csdn.net/jiaomeng/archive/2007/01/28/1496329.aspx 从哈希存储到Bloom Filter 焦萌 2007年1月28日 先解释一下 ...
- Bloom Filter算法
一.概念 Bloom Filter的中文翻译叫做布隆过滤器,是1970年由布隆提出的.它实际上是一个很长的二进制向量和一系列随机映射函数.布隆过滤器可以用于检索一个元素是否在一个集合中.它的优点是空间 ...
- 【guava】大数据量下的集合过滤—Bloom Filter
1.概述 转载防丢失,请看原文 算法背景 相似文章:Bing搜索核心技术BitFunnel原理 如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定.链表.树. ...
- 布隆过滤器(Bloom Filter)- 原理、实现和推导
目录 算法背景 布隆过滤器–概念 布隆过滤器-原理 布隆过滤器-缺点 布隆过滤器-实现 布隆过滤器-应用 布隆过滤器-公式推导 算法背景 问题: 在开发中,经常要判断一个元素是否在一个集合中. 实现方 ...
- 大数据处理算法--Bloom Filter布隆过滤
1. Bloom-Filter算法简介 Bloom-Filter,即布隆过滤器,1970年由Bloom中提出.它可以用于检索一个元素是否在一个集合中. Bloom Filter(BF)是一种空间效率很 ...
- 海量数据处理算法—Bloom Filter
1. Bloom-Filter算法简介 Bloom-Filter,即布隆过滤器,1970年由Bloom中提出.它可以用于检索一个元素是否在一个集合中. Bloom Filter(BF)是一种空间效率很 ...
- Hbase_Hbase 中 bloom filter 的设计与概念
Hbase 中使用了大名鼎鼎的 bloom filter, 我们来学习一下 bloom filter. 原文地址: https://www.cnblogs.com/zhxshseu/p/52898 ...
最新文章
- jQuery复选框选中状态更改事件
- 从微信红包的春节活动运营方案中,必读的运营策略
- Curses 中的 noecho() 函数
- SX1301吞吐量是SX1276/8的多少倍?
- 【转】【C#】使用fo-dicom完成BMP,JPG,PNG图片转换为DICOM文件
- 平衡二叉树、二叉排序树-数据结构
- v-for 获取数组key value_Vue之路 | 05von、vif、vfor
- Spring Boot基础学习笔记24:RabbitMQ安装以及整合环境搭建
- 小程序开发好学吗?需要掌握哪些知识技能?
- RedisTemplate存数据时指定过期时间
- 排序算法之——归并排序分析
- 2021-06-13并发线程控制方法3种
- 文远知行公布自动驾驶运营路线图:全新升级自动驾驶方案,建立500辆规模的自动驾驶车队...
- 发那科机器人寄存器Ar_浅谈发那科机器人与TP参数之间的关系
- MySQL字符串的拼接方法
- 使用highEcharts做出中国地图的效果图
- 批量替换角标,为角标添加中括号
- 线上引流方法有哪些?怎么做线上引流推广?线上引流推广方法
- PhishTank恶意URL数据集分享
- 思科1832I/1852I/2802/3802无线AP卡死不通电无射频故障维修
热门文章
- C++Pollard_rho分解质因数及其例题—————Prime Test
- matlab有LLG方程的解么,matlab在常微分方程数值解中应用.docx
- 阴阳师2017 7服务器维护,《阴阳师》手游4月17日维护更新公告
- Error: Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist: No URLs
- 【安装windows10 RTX3090 tensorflow的开发环境】
- linux挂载镜像iso文件作为yum源
- 最全搭建自己的SOCKS代理服务器
- js 对象拼接的方法 数组 Map Set
- Flask蓝本与子域名
- (三)洞悉linux下的Netfilteramp;iptables:内核中的rule,match和target