1.原理:

          a.解决的问题:
               判断一个元素是否在一个集合中
 
          b.Hash表的特点:
               i.快速准确,但是耗费存储空间
               ii.先将url或者email转为8个字节的信息指纹,在考虑Hash50%的存储效率,1亿url或者email需要16亿字节,即1.6GB空间
 
          c.布隆过滤器:

               i.能用1/8到1/4大小的空间就能解决问题,主要用一个很长的二进制向量和一系列随机映射函数
               ii.对1亿的email地址,先申请16亿字节空间,作为一个二进制向量,然后将其全部清0,对一个地址X,用8个随机数产生器(F1,...,F8)生成8个信息指纹(f1,...,f8),再用一个随机数产生器G把这8个信息指纹映射到1-16亿中的8个自然数g1,...,g8,再把这8个自然数对应位置设置为1,构成布隆过滤器
           
               iii.布隆过滤器绝对不会漏掉在黑名单中的email,但是有时会出现误判,将正确的email判断为黑名单,一种处理办法是建立一个小的白名单,储存那些可能被误判的邮件地址
       
2.布隆过滤器的误识别率:
          a.假阳性:把不在集合中的元素错判成集合中的元素
          b.假设布隆过滤器有m比特,里面有n个元素,每个元素对应k个指纹的Hash函数,求一个位置在插入n个元素后被置成1的概率(因为置成1有很多种可能,考虑置成0方便简单)
               i.某个比特被置为1的概率为1/m,为0的概率为1-1/m
               ii.插入一个元素后,其为0的概率为(1-1/m)^k,插入n个元素后,为0的概率为(1-1/m)^kn;则插入n个元素后为1的概率为1-(1-1/m)^kn
               iii.当新的元素被误判时,需要其k个Hash函数的信息指纹都为1,即(1-(1-1/m)^kn)^k,约为(1-e^kn/m)^k,
        

布隆过滤器(BoomFilter)的更多相关文章

  1. 布隆过滤器的概述及Python实现

    布隆过滤器 布隆过滤器是一种概率空间高效的数据结构.它与hashmap非常相似,用于检索一个元素是否在一个集合中.它在检索元素是否存在时,能很好地取舍空间使用率与误报比例.正是由于这个特性,它被称作概 ...

  2. 【转】Bloom Filter布隆过滤器的概念和原理

    转自:http://blog.csdn.net/jiaomeng/article/details/1495500 之前看数学之美丽,里面有提到布隆过滤器的过滤垃圾邮件,感觉到何其的牛,竟然有这么高效的 ...

  3. 布隆过滤器(Bloom Filter)详解——基于多hash的概率查找思想

    转自:http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html   布隆过滤器[1](Bloom Filter)是由布隆(Burton ...

  4. 布隆过滤器(Bloom Filter)的原理和实现

    什么情况下需要布隆过滤器? 先来看几个比较常见的例子 字处理软件中,需要检查一个英语单词是否拼写正确 在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上 在网络爬虫里,一个网址是否被访问过 yahoo, ...

  5. 布隆过滤器(Bloom Filter)

    一.布隆过滤器介绍 Bloom Filter是一种空间效率很高的随机数据结构,Bloom Filter可以看做是对bit-map的扩展,它的原理如下: 当一个元素被加入集合时,通过K个Hash函数将这 ...

  6. 布隆过滤器的java实现

    package com.kaikeba.data.jobspider.util; import java.util.BitSet; public class Bloomfilter { private ...

  7. Bloom Filter(布隆过滤器)

    布隆过滤器用于测试某一元素是否存在于给定的集合中,是一种空间利用率很高的随机数据结构(probabilistic data structure),存在一定的误识别率(false positive),即 ...

  8. 简化布隆过滤器——BitMap

    简化布隆过滤器--BitMap 前言 前段开发项目试就发现,一部分的代码实现存在着一些性能上的隐患.但当时忙于赶进度和由于卡发中的不稳定因素,想了许多解决方案也没有机会实施.最近,正好趁个机会进行一系 ...

  9. [转载] 布隆过滤器(Bloom Filter)详解

    转载自http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html   布隆过滤器[1](Bloom Filter)是由布隆(Burton ...

随机推荐

  1. Greedy Change

    Greedy Change time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  2. Hadoop RPC机制

    RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.Hadoop底层的交互都是通过 rp ...

  3. linux ubuntu平台下安装Scrapy

    1.安装Python sudo apt-get install python2.7 python2.7-dev 2.安装pip 下载get-pip.py 选中该文件所在路径,执行下面的命令 sudo ...

  4. this与super使用总结(java)

    this: Java关键字this只能用于方法方法体内.当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this.因此,this只能在类中的非静态方法 ...

  5. java基础增强

    Eclipse使用: java Compile配置的是java编译环境 java Build path配置的是java运行环境 运行环境的版本必须高于编译环境的版本.否则报错 工程上 右键--prop ...

  6. centos6.5 安装git

    1.安装编译git时需要的包 # yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel # yum ins ...

  7. centos yum源问题

    在配置CentOS-6.0-x86_64-bin-DVD2.iso作为本地yum源的时候,碰到相当多的问题: -----------------------------------------  问题 ...

  8. java Future模式

    Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...

  9. Linux学习 -- Shell编程 -- 条件判断

    按照文件类型进行判断 两种格式 test -e /root/install.log [ -e /root/install.log ]   注意空格  适合用于脚本中 echo $?可以看到结果 [ - ...

  10. xdebug 安装

    如果是这样的话,请参考 http://www.mengyunzhi.com/share/php/107-xdebug.html 进行xdebug的安装.