首页 > 编程知识 正文

布隆过滤器推导,布隆过滤器的优缺点

时间:2023-05-06 20:51:54 阅读:130409 作者:10

布隆过滤器布隆过滤器(Bloom Filter )是布隆过滤器在1970年提出的。 布隆过滤器是一种数据结构,其特征是高效插入和检查。 该算法可以确定某个元素是否位于某个集合中,而无需存储该元素(key )的值。 虽然效率更高、空间更省,但存在返回不准确、概率性结果的缺点。

如下图所示,实现原理光晕滤波器的是bit向量或bit数组。

实际上由长二进制向量和一系列随机映射函数(散列函数)组成。 如果考虑二进制向量的长度为9、散列函数的个数为3的布隆过滤器,则对于元素X,三个不同的散列函数分别生成的散列值为1、4、8。 上图如下所示

同样,如果散列函数返回4、6、9,则图如下所示: 保存另一个元素Y

值得注意的是,4这个位是复盖的,因为两个值的散列函数都返回了这个位。 此时,如果询问是否存在3358www.Sina.com/,则三个散列函数的返回值为1、5、8,但第5比特的值为0意味着映射到该比特的值一个也没有

另一方面,如果需要确定是否存在值元素Z,则散列函数始终返回1、4和8。 接下来,确保这三个位的值都为1。 元素x这个值可能存在,但并不一定存在。 因为增加的值越多,设定为1的位也越多。 即使这样没有存储某一值3358www.Sina.com/,如果散列函数返回的三个位被其它要素设置为1,则程序判断为存在元素Z的值。

注意:

太小的光晕滤波器将很快使所有位都变为1,并且在询问任何值时都会返回“可能存在”,从而导致无法实现滤波目的。 布隆过滤器的长度直接影响误报率,布隆过滤器越长误报率越小。 此外,散列函数的数量也需要折衷,数量越大,模糊滤波器的位位置位1的速度越快,模糊滤波器的效率越低; 但是太少的话,我们的误报率会很高。 有关使用手动java代码实现光晕过滤器的信息,请参见https://blog.csdn.net/QQ _ 33709582/article/details/108407706

使用Guava提供的相关类库(推荐)首先,必须在项目中部署Guava依赖关系。

ependencygroupidcom.Google.guava/groupidartifactidguava/artifactidversion 24.1.1-JRE/version/dependency的实际使用

import com.Google.com mon.hash.bloom filter; import com.Google.com mon.hash.funnels; publicclassguavatest 01 { publicstaticvoidmain (字符串[ ] args ) /创建光晕过滤器对象,长度1000,错误判定率0.01 bloomfilterintegerfilttegerfiltttion 确定指定元素100和200中是否存在System.out.println ()在添加元素之前() filter.mightcontain () 100 ) ) ); System.out.println (在添加'元素之前) filter.mightcontain(200 ); //在布隆过滤器filter.put(100 )中添加元素100和200; filter.put(200; //确定指定元素100和200中是否存在System.out.println ()添加元素后() filter.mightcontain ) ) 100 ); System.out.println ('添加元素后(filter.mightcontain ) ) 200 ); }运行结果如下。

添加元素之前:添加false元素之前:添加false元素之后:添加true元素之后: true参考文章:详细了解光晕过滤器原理,使用场景和注意事项

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。