博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bloom Filter 布隆过滤器
阅读量:5074 次
发布时间:2019-06-12

本文共 619 字,大约阅读时间需要 2 分钟。

Bloom Filter 是由伯顿.布隆(Burton Bloom)在1970年提出的一种多hash函数映射的快速查找算法。它实际上是一个很长的二进制向量和一些列随机映射函数.应用在数据量很大的情况下。

算法

初始化一个m比特的值全为0的向量。选择k个不同的散列函数,散列函数的产生的值域范围是0~m-1.
1)元素加入过滤器
   对于元素e1,通过k个散列函数分别产生了值为 h
1 ,h
2, ..., h
k ;
   将二进制向量的第 h
1 ,h
2, ..., h
位分别置为1;
   

 

2)查找元素
将元素通过k个散列函数分别产生值为h
1 ,h
2, ..., h
k ;
查找二进制向量的第 h
1 ,h
2, ..., h
检查这些位是否都为1,如果都为1,那么该元素有可能存在,如果不全是1,那么元素一定不存在。
上面提到如果二进制向量的 第h
1 ,h
2, ..., h
k位都为1,那么元素有可能存在,是因为产生散列值时有可能发生散列碰撞。这种将不再集合中的元素错判为存在集合中的情况称为fals positive.
 3)删除元素
元素加入二进制向量就不方便删除了,因为多个元素的某一个散列值有可能一样,删除的话,会影响其他元素的判断。这里可以对二进制向量的位置采用计数的方式,如要删除,将计数减1即可。

 

转载于:https://www.cnblogs.com/tracer-dhy/p/6125987.html

你可能感兴趣的文章
[ NOI 2002 ] 荒岛野人
查看>>
网络支付改变两亿人生活
查看>>
取数据库MDF文件存储路径SQL语句
查看>>
【转】C#使用PrintDocument打印 多页 打印预览
查看>>
PHP list() 函数
查看>>
(转载)重新对APK文件签名
查看>>
layui弹窗、字符串转一维数组
查看>>
Qt打包成单独可执行的exe文件
查看>>
test
查看>>
1.7 HelloWorld 添加视图
查看>>
设计模式-写在前面
查看>>
bat脚本学习
查看>>
asp.net应用程序脱机app_offline.htm文件
查看>>
XMind 入门教程
查看>>
ElasticSearch restful实操
查看>>
Python实现图片转文字并翻译至剪切板
查看>>
条件语句中出现多个OR的情况
查看>>
java List接口实现类
查看>>
遗忘的基础概念——并发、并行、进程、线程
查看>>
洛谷1094 纪念品分组
查看>>