Counting Bloom Filter

原创 2007年01月30日 22:25:00

Counting Bloom Filter

焦萌 2007130

 

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

 

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

 

 

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

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

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

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

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

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

 

 关于Counting Bloom Filter最早的论文:Summary Cache: A Scalable Wide-Area Web Cache Sharing Protocol

版权声明:本文为博主原创文章,未经博主允许不得转载。

Bloom Filter概念和原理

Bloom Filter概念和原理焦萌 2007年1月27日 Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom ...
  • jiaomeng
  • jiaomeng
  • 2007年01月27日 12:47
  • 189114

基于Redis的Bloomfilter去重(附Python代码)

前言:“去重”是日常工作中会经常用到的一项技能,在爬虫领域更是常用,并且规模一般都比较大。去重需要考虑两个点:去重的数据量、去重速度。为了保持较快的去重速度,一般选择在内存中进行去重。 数据量不大时,...
  • Bone_ACE
  • Bone_ACE
  • 2016年11月10日 12:32
  • 10756

海量数据处理算法—Bloom Filter

1. Bloom-Filter算法简介         Bloom-Filter,即布隆过滤器,1970年由Bloom中提出。它可以用于检索一个元素是否在一个集合中。        Bloom...
  • hguisu
  • hguisu
  • 2012年08月14日 18:40
  • 59632

BloomFilter(大数据去重)+Redis(持久化)策略

BloomFilter(大数据去重)+Redis(持久化)策略背景之前在重构一套文章爬虫系统时,其中有块逻辑是根据文章标题去重,原先去重的方式是,插入文章之前检查待插入文章的标题是否在ElasticS...
  • qq_18495465
  • qq_18495465
  • 2017年11月10日 15:43
  • 389

基于Redis的BloomFilter实战

离线数据处理与实时数据处理有很大的不同,其中一个例子就是去重。在聚数据中,访问UV和购买UV都需要实时的去重。离线处理的时候,我们可以通过count(groupby)或者count(distinct)...
  • xf_87
  • xf_87
  • 2016年04月06日 14:33
  • 1879

大量数据去重:Bitmap和布隆过滤器(Bloom Filter)

5TB的硬盘上放满了数据,请写一个算法将这些数据进行排重。如果这些数据是一些32bit大小的数据该如何解决?如果是64bit的呢? 在面试时遇到的问题,问题的解决方案十分典型,但对于海量数据处理接触少...
  • zdxiq000
  • zdxiq000
  • 2017年02月27日 17:46
  • 2292

bloom filter

  • 2012年10月12日 20:50
  • 2KB
  • 下载

BloomFilter布隆过滤器使用

从上一篇可以得知,BloomFilter的关键在于hash算法的设定和bit数组的大小确定,通过权衡得到一个错误概率可以接受的结果。 算法比较复杂,也不是我们研究的范畴,我们直接使用已有的实现。 ...
  • tianyaleixiaowu
  • tianyaleixiaowu
  • 2017年07月07日 17:49
  • 2501

BloomFilter——大规模数据处理利器

Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。   一. 实...
  • hong0220
  • hong0220
  • 2014年12月20日 21:27
  • 786

海量数据处理之Bloom Filter详解

海量数据处理之Bloom Filter详解  前言    本博客内曾已经整理过十道海量数据处理面试题与十个方法大总结。接下来,本博客内会重点分析那些海量数据处理的方法,并重写十道海量数据处理的面试题。...
  • v_JULY_v
  • v_JULY_v
  • 2011年08月14日 13:19
  • 77507
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Counting Bloom Filter
举报原因:
原因补充:

(最多只允许输入30个字)