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. Simple But Useful Samples About 'grep' Command(简单实用的grep 命令)

    Do the following: grep -rnw '/path/to/somewhere/' -e "pattern" -r or -R is recursive, -n i ...

  2. linux视频学习4(crontab和进程)

    1 . crontab定时任务: 任务调度: 系统在某个时间执行的特定的命令. 分类: 1.系统工作.2.个别的用户工作. 设置任务调度文件: /etc/crontab 1.crontab -e  : ...

  3. android平台菜单返回键监听

    //声明 void onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event); //实现 //按键控制(检测onKeyReleased有反 ...

  4. 转:Windows平台配置Appium+Java环境

    1) 安装JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装 ...

  5. Windows API 之 CreateFile、CreateFileMapping 、MapViewOfFile

    CreateFile Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: ...

  6. STM32F2系列时钟的配置

    前一节详细介绍了系统默认的时钟配置,及各路时钟输出是多少,这是默认配置的,但实际使用的时钟默认的时钟并不符合要求,所以就得知道如何调用库函数进行配置. 最好的资料就是查阅stm32f2xx_rcc.c ...

  7. Nginx配置proxy_pass【转载】

    在nginx中配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走. 下面四种 ...

  8. bat脚本:自动压缩n天前的文件【转载】

    原文如下: bat脚本:自动压缩n天前的文件-中原小伙-ChinaUnix博客http://blog.chinaunix.net/uid-24946452-id-1651762.html     磁盘 ...

  9. 标准与扩展ACL实验

    一标准访问控制列表实验: 实验拓扑: 实验目的:掌握标准与扩展ACL的配置 实验要求:拒绝R1到R3的所有流量 实验步骤: 步骤1 按如上拓扑做好底层配置,并检测相邻设备之间的连通性 步骤2起静态路由 ...

  10. Java 错误:找不到或无法加载主类

    环境变量的配置有问题,你改改吧:HOME是 D:\Java\jdk1.8.0_11 Path是 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin CLASSPATH是 .;%JA ...