首页 > 编程知识 正文

一个过滤器必须实现,过滤器理论

时间:2023-05-03 12:37:53 阅读:130386 作者:3334

另一方面,显然bloom过滤器的结构bloom过滤器本身是长的二进制向量,既然是二进制的向量,所以存储的不是0也不是1。

如图所示,创建新的16位布隆过滤器

有我们通过的对象

方式计算他的混列值,得到混列=2

方式2计算他的混列值,得到混列=9

方式3计算他的散列值,得到hash=5

用三种方法计算可以得到三个数值。 将这三个数字对应的布隆过滤器向量值更改为1,表示该位置有值。

当获得值16-3时,第二个对象将16-3更改为1

对于光晕过滤器本身,没有存储任何数据,只是计算该数据的位置并存储向量值

那么,如果需要确定模糊滤波器中是否存在某一数据,则可以确定所计算的所有向量值是否都是1。

但是,随着存储的数据向量增加,可能会出现2 9 5个向量的值都为1但实际上没有该数据的情况。 布隆过滤器只能判断某个数据一定不存在,但不能保证某个数据一定存在。

布隆过滤器也无法删除数据,因为一个向量位置可能映射到多个对象

二、布隆过滤器的设计,如果矢量长短,误判率直线上升。

向量太长会浪费大量的内存。

计算次数过多会消耗计算资源,便于立即填充过滤器。

三、代码实现对POM文件的依赖

ependencygroupidcom.Google.guava/groupidartifactidguava/artifactidversion 25.1-JRE/version/dependency/dendency

创建1亿个publicstaticvoidmain (string . args ) { /** *插入对象,误报率为0.01%的布隆过滤器*/bloomfiltercharsequencebloomfilter=bloom filter.create (funnels.string funnel (charset.forname ) ) ) ) ) boomfilter.put('122 ); boomfilter.put('123 ); system.out.println (bloom filter.might contain (' 121 ' ); }

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