`
flyingdutchman
  • 浏览: 358902 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

BloomFilter算法

阅读更多
        BloomFilter算法是在1970年提出的算法,具有很好的空间和时间效率,内部是依赖一些列hash算法和数组的。被用来检测一个元素是不是集合中的一个成员,允许有一定的出错率:如果某个数据被判断不在集合中,那么该数据就一定不会在这个集合中;由于hash会有碰撞存,那么如果判断某数据在集合内,这会种判断可能出错。一句话,就是判断为"false"的就一定不会有错,而判断为"true",则有可能出错。可见 Bloom filter 是牺牲了正确率换取时间和空间,居于这种特性,我们可以把BloomFilter当成大数据快速排除算法。
        它是hash快速查表的改良快速算法。
        BloomFilter的特点:数据的插入和查询时间都是常数,另外它查询元素却不保存元素本身,具有良好的安全性。
        BloomFilter的缺点:当插入的元素越多,错判“在集合内”的概率就越大了,另外 Bloom filter 也不能删除一个元素,因为多个元素哈希的结果可能在 BloomFilter 结构中占用的是同一个位,如果删除了一个比特位,可能会影响多个元素的检测。
        Bloom filter 采用的是哈希函数的方法,将一个元素映射到一个 m 长度的阵列上的一个点,当这个点是 1 时,那么这个元素在集合内,反之则不在集合内。这个方法的缺点就是当检测的元素很多的时候可能有冲突,解决方法就是使用 k 个哈希 函数对应 k 个点,如果所有点都是 1 的话,那么元素在集合内,如果有 0 的话,元素则不在集合内。
        在实际的应用中为了,可以使用“白名单”的方式和该算法来减少出错。
        BloomFilter算法思想是这样的:创建一个数组或BitMap,将之全部初始化为0,然后选择创建几个不同的hash函数,放入数据的时候,将加入地数据通过这几个hash函数得出数据在数组或BitMap中的下表,并以此将按其下标将对应的数组或BitMap中的数据改为1;判断数据是否包含在集合中的时候,还是通过这几个hash函数获得相应的几个hash值——即数组或BitMap的下表,然后循环判断下表对应的数据结构中的数据,如果其中有一个不为1,就可以判断数据不包含在聚合中,否则标识包含在聚合中。由上述过程我们可以看到,当判断为判断某数包含在集合时,可能有误判。
        BloomFilter跟单哈希函数Bit-Map不同之处在于:Bloom Filter使用了N个哈希函数,每个字符串跟N个bit对应,从而降低了冲突的概率。
        下面让我们看一下数据是如何加入到BloomFilter的结构中的:


        Bloom Filter参数选择
        1)、哈希函数选择
        哈希函数的选择对性能的影响应该是很大的,一个好的哈希函数要能近似等概率的将字符串映射到各个Bit。选择k个不同的哈希函数比较麻烦,一种简单的方法是选择一个哈希函数,然后送入k个不同的参数。
        2)、Bit数组大小选择
        哈希函数个数k、位数组大小m、加入的字符串数量n的关系,当 k = ln(2)* m/n 时出错的概率是最小的。

       
 
  • 大小: 47.7 KB
分享到:
评论

相关推荐

    C语言实现的Bloomfilter算法。.zip

    Bloom Filter是一种空间效率极高的概率型数据结构,用于判断一个元素...以上就是关于C语言实现的Bloom Filter算法的主要知识点,理解这些内容有助于我们掌握Bloom Filter的工作原理,以及如何在实际项目中应用和优化。

    大量url去重 bloomfilter算法 c实现

    基于bloomfilter算法的c语言实验的url去重。使用的时候被去重的文件需要是txt格式的。

    自己写的Java抓图程序(用了BloomFilter算法)

    自己写的Java抓图程序 原理见 http://blog.csdn.net/binyao02123202/archive/2010/07/12/5728840.aspx 用了序列化 线程 和BloomFilter算法

    PHP中实现Bloom Filter算法

    在PHP中实现Bloom Filter算法,可以通过创建一个类来封装位数组和哈希函数,该类应该具备添加元素和查询元素是否存在的功能。对于哈希函数的选择,常见的有MD5、SHA系列等,但在PHP中可以通过内置的hash函数来实现。...

    Url消重算法(BloomFilter)

    本程序主要是BloomFilter算法的简化实现 因为C#非安全代码无法直接分配内存块,使用了int型数组代替,暂时为了简单没有使用位运算,比位运算消耗内存多16倍。 算法原理: 其首先申请一块大内存,并把内存中...

    Bloom Filter用于url去重

    #### 二、Bloom Filter算法 ##### 2.1 Bloom Filter算法简介 Bloom Filter是一种概率型数据结构,由Burton Howard Bloom于1970年提出。它主要用于判断一个元素是否在一个集合中,尤其适用于处理大量数据的场景。与...

    大数据处理算法.pdf

    大数据处理算法目录中,主要介绍了三种大数据处理算法:Bitmap 算法、Bloom Filter 算法和分而治之/Hash 映射 + Hash 统计 + 堆/快速/归并排序。 大数据处理算法一:Bitmap 算法 Bitmap 算法是一种常用的大数据...

    bloom filter

    bloom filter算法的c语言实现

    一种新的基于Bloom filter数据结构的数据消冗算法.pdf

    "一种新的基于Bloom filter数据结构的数据消冗算法" 本文提出了一种新的基于Bloom filter数据结构的数据消冗算法,该算法首先利用完全文件检测算法对数据进行检验匹配,通过的数据块再利用CDC分块检测算法进行...

    基于Bloom Filter的海量数据分布式快速匹配算法研究.pdf

    综上所述,文章讨论了海量数据快速匹配所面临的问题和挑战,并提出了一种基于Bloom Filter的分布式快速匹配算法,该算法通过分布式技术提高了海量数据匹配的效率,减少了对服务器内存的需求,从而解决了制约应用程序...

    一种基于Bloomfilter的高速浮动关键词匹配算法

    一种基于Bloomfilter的高速浮动关键词匹配算法 知识点摘要: 1. Bloom Filter的概念和原理:Bloom Filter是一种空间效率高、查询速度快的概率性数据结构,用于检测元素是否存在于集合中。其工作原理是将要检测的...

    转载 : 基于Bloom-Filter算法的URL过滤器的实现.txt

    ### 基于Bloom-Filter算法的URL过滤器实现详解 #### 一、Bloom-Filter算法简介 Bloom Filter是一种空间效率极高的概率型数据结构,它由Burton Howard Bloom在1970年提出。Bloom Filter主要用于判断一个元素是否在...

    多字段矩阵型bloomfilter(支持砍维度)

    在传统的Bloom Filter中,它通常处理单一的关键字,而在“多字段矩阵型Bloom Filter”中,这一概念被扩展到了支持多个字段的情况,这使得它在处理复杂数据集时更具灵活性。 首先,我们要理解Bloom Filter的基本原理...

    libbloom.tar_bloom_

    综上所述,"libbloom.tar_bloom_"很可能是一个实现了Bloom Filter算法的库,可以帮助开发者在他们的程序中高效地实现数据存在性的快速检查,同时节约存储空间。理解Bloom Filter的基本原理和优化方法对于有效利用这...

    python编写知乎爬虫实践.pdf

    "Python爬虫实践" 基于给定的文件信息,我们可以总结出...本文总结了爬虫工作原理、网页抓取、去重、解析和存储相关技术栈、Bloom Filter算法、爬虫反爬虫策略及应对措施等关键知识点,并对爬虫项目实践进行了总结。

    BloomFilter及其应用综述

    Bloom filter是一个简明的空间效率极高的随机的数据结构。用Bloom filter 表示 cache 内容 ,可以高效地实现cache 协作。本文对BloomFilter及其改进型进行了综述性分析,探讨了它的实用性。

Global site tag (gtag.js) - Google Analytics