Bloom Filter

来源:互联网 发布:阅读打卡软件 编辑:程序博客网 时间:2024/06/02 07:28

布隆过滤器(Bloom Filter)是1970年由布隆提出的。

它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。

它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。

算法描述

Bloom Filter由长度为m的bit数组和k个hash函数组成

m = -nlnp/(ln2)^2,p是误判率k = ln2 * m/n

输入样本对象,将通过k个hash函数,生成k个值,映射至bit数组,对应位置1;
查看一个对象是否在一个集合中,首先将该对象通过k个hash函数,映射至bit数组,查看所有对应位是否都为1,若都为1,则存在;只要一个不为1,就不存在。当bit数组过小时,回存在误判,但其实误判率很低,万分之一。

URL黑名单

网页黑名单包含100亿个网页,每个网页的URL最多占用64B,现在实现一个网页过滤系统,根据网页的URL判断网页是否在黑名单上。
要求:
1)允许万分之一以下的误判率。
2)额外空间不超过30GB。

100亿*64B =640G>30GB,不可以。
用布隆过滤器,无需考虑每个样本的大小

m = -n*lnp/(ln2)^2 = 19.19n

向上取整m=20n = 2000亿bit = 25GB<30GB,完全可以,
即需要长度为2000亿的bit数组。

k = ln2*m/n = 14

即需要14个hash函数。

原创粉丝点击