码迷,mamicode.com
首页 > 其他好文 > 详细

为什么bloom filter比bitmap更加有效?

时间:2015-08-04 00:39:35      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:

        布隆过滤器基本对于做后端服务的同学,应该是耳熟能详。扫了一下比较容易搜到的资料,都能够比较明白的讲出布隆过滤器是一个什么东西?如何推导?如何选取k值?如何根据数据量的大小和冲突率的需求,选择布隆过滤器的容器大小。如果有不明白,参见下面的链接。但是我发现似乎没有哪个资料讲了,布隆过滤器为什么会比bitmap更加优秀?

         布隆过滤器基本原理参见 http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html


         这篇博客想要用简单的数学推导分析一下,为什么布隆过滤器优于bitmap?用数据曲线做一下简单的展示。

         注:n是插入元素的个数,m是布隆过滤器或者bitmap的比特位的数目

         1、布隆过滤器的假正例概率:p =  (1- e^(-kn/m))^k, 当k=(m/n)*ln2时,p=e^(-m/n)

         2、bitmap的假正例概率推导:

               每次插入一个元素,某一位被置1的概率是 1/m,那么0的概率是(1-1/m);经过n次插入之后,该一位还是0的概率是(1-1/m)^n;

               那么经过n次插入之后,该位是1的概率是 1-(1-1/m)^n;根据概率公示,p=1-(1-1/m)^n ~ 近似于~ (1- e^(1-n/m))

               也就是 p=1- e^(1-n/m)


          于是可以把两种算法的 假正例概率绘成曲线图如下。在曲线图中,从整体上,布隆过滤器的表现似乎只是略优于bitmap,但是我们关注的应该是假正例概率比较低的部分。关注一下当假正例概率低于0.1的时候,布隆过滤器优势想当明显。

技术分享技术分享


        当然,这个结论也可以做一个简单的数学分析。当我们在一定的数据量n和假正例概率需求的情况下,

                布隆过滤器的比特位需求是m1=-ln(p) * n

                bitmap的比特位需求是m2=n/ln(1-p)

                求解 diff = m2-m1 = 1/(1-ln(1-p)) + ln(p) 

                对于这个函数f(p) = 1/(1-ln(1-p)) + ln(p) 求导求极值后发现,当p=1的时候,f(p)有极小值小值1且在0~1内是最小值

         也就是说,当p在0~1的区间内,bitmap都至少要比布隆过滤器多一个bit才能满足相同的 数据量和假正例的需求


  

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

为什么bloom filter比bitmap更加有效?

标签:

原文地址:http://blog.csdn.net/answer3y/article/details/47265579

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!