您的位置:首页 > 其它

关于布隆过滤器(Bloom-Filter)的理解

2015-06-27 10:35 204 查看
简介:

Bloom-Filter,即布隆过滤器,1970年由Bloom中提出。它可以用于检索一个元素是否在一个集合中,其优点是空间效率和查询时间都远远超过其他算法,其不足在于Bloom-
Filter存在着误判。 因此, Bloom
Filter 不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下, Bloom
Filter 通过极少的错误换取了存储空间的极大节省。 

实质:牺牲准确率来换取时间和空间

基本思想:

Bloom-Filter实际上是一个很长的二进制向量和一系列随机映射函数

Bloom-Filter算法的核心思想就是利用多个不同的Hash函数来解决“冲突 ”。计算某元素x是否在一个集合中,首先能想到的方法是将所有的已知元素保存起来构成有一个集合R,然后用元素x跟这个R中的元素一一比较来判断是否存在于集合R中,我们可以采用链表等数据结构来实现,但是,随着集合R中元素的增加,其占用的内存将越来越大。试想,如果有几千万的不同的网页需要下载,所需的内存足以占用掉整个进程的内存地址空间。即使是使用MD5,UUID这个方法将URL转成固定的短小的字符串,内存占用也是相当巨大的。

    一般来讲,计算机中的集合是用hash table来存储的,它的好处就是快速、准确,缺点是浪费存储空间。当集合巨大是,存储效率低的问题就显现出来了。但是当我们使用多个hash函数的时候可大大的节省存储空间。

应用:

Bloom-Filter一般用于在大数据量的集合中判定某元素是否存在。例如邮件服务其中的垃圾邮件过滤器。在搜索引擎中,Bloom-Filter常用于网络爬虫的URL过滤。网络爬虫通常有一个URL列表,保存着和将要下载和已经下载的网页的URL,网络蜘蛛下载了一个网页,从网页中提取到亲的URL后,判断该URL是否已存在于列表中,此时,Bloom-Filter是最好的选择

在java实现中需要导入第三方的jar包
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息