布隆过滤器

布隆过滤器概述

简单来说,布隆过滤是判断一个值(key)是否在一个集合中的一种特别的数据结构,但和一般的集合它不同之处在于它不存放实际的值(key)而是以K个bit位这样的标记来替代实际的值(k),这样有什么好处呢,其实就是省了很大的内存空间。
优点:在大数据量的时候可以省内存空间
缺点:有一定的误报比率,就是不在集合中的值可能也会被当做在集合中,而误报比率和具体的申请的布隆过滤器的内存空间大小以要把实际的值K,要把实际的值以多少个bit位(会被多少个哈希函数处理)有关。
详细介绍:
布隆过滤器(Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的。它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率(假正例False positives,即Bloom Filter报告某一元素存在于某集合中,但是实际上该元素并不在集合中)和删除困难,但是没有识别错误的情形(即假反例False negatives,如果某个元素确实没有在该集合中,那么Bloom Filter 是不会报告该元素存在于集合中的,所以不会漏报)。

在日常生活中,包括在设计计算机软件时,我们经常要判断一个元素是否在一个集合中。比如在字处理软件中,需要检查一个英语单词是否拼写正确(也就是要判断 它是否在已知的字典中);在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上;在网络爬虫里,一个网址是否被访问过等等。最直接的方法就是将集合中全部的元素存在计算机中,遇到一个新 元素时,将它和集合中的元素直接比较即可。一般来讲,计算机中的集合是用哈希表(hash table)来存储的。它的好处是快速准确,缺点是费存储空间。当集合比较小时,这个问题不显著,但是当集合巨大时,哈希表存储效率低的问题就显现出来 了。比如说,一个象 Yahoo,Hotmail 和 Gmai 那样的公众电子邮件(email)提供商,总是需要过滤来自发送垃圾邮件的人(spamer)的垃圾邮件。一个办法就是记录下那些发垃圾邮件的 email 地址。由于那些发送者不停地在注册新的地址,全世界少说也有几十亿个发垃圾邮件的地址,将他们都存起来则需要大量的网络服务器。如果用哈希表,每存储一亿 个 email 地址, 就需要 1.6GB 的内存(用哈希表实现的具体办法是将每一个 email 地址对应成一个八字节的信息指纹然后将这些信息指纹存入哈希表,由于哈希表的存储效率一般只有 50%,因此一个 email 地址需要占用十六个字节。一亿个地址大约要 1.6GB, 即十六亿字节的内存,因此存贮几十亿个邮件地址可能需要上百 GB 的内存。除非是超级计算机,一般服务器是无法存储的
具体实现:
1、首先要根据的数据量和可容忍的误报比率来确定申请的布隆过滤器的内存空间
m = - (n lnp)/ln2*
其中m是以bit为单位,代表布隆过滤器需要申请的内存空间
n代表数据量
p代表容忍的误报比率

2、根据申请的布隆过滤器的内存空间和数据量来确定需要的哈希函数
k = ln2(m/n)*
k是需要的哈希函数个数

总结:总的来说,一个k经过布隆过滤器处理后,会由K个bit位来代替,即如果K存在这个集合中那么K这个值对应的K个bit会被赋予1,所以以后要查看一个值是否存在于布隆过滤器中,只看这个值对应的K个标记是否被赋予1了若都被赋予了就存在,有一个没被赋予那么就不存在。这样的处理方式,就可以不用存真实的数据了,因为真实的数据可能 要占很大的内存,而几个bit就可以替代原始值的存在,这种等效替换,极大减少了内存
举个例子:

//申请了1000长度的long数组等效于有64000个bit位
long[] bloom = new long[1000];//64000bit
int index = 3000;//要被标记的比特位
longIndex = index / 64;//该比特位在那个0~999个long类型的那个桶中
bitIndex = index % 64;//在某个long类型的桶中的那个比特位

bloom[longIndex] = bloom[longIndex] | (1 << bitIndex);//将该位置的比特位赋予1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值