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. UVA 1193 区间相关(greedy)

    input n d 1<=n<=1000 n行坐标xi,yi output 位于x轴扫描器的扫描距离为d,至少要多少个扫描器才能扫描到所有坐标 如果无法扫描完输出-1,否则输出扫描器个数 ...

  2. HTML5程序设计 Canvas API

    检测浏览器支持情况 <script type="text/javascript"> try { document.createElement("Canvas& ...

  3. list遍历

     一.对List的遍历有三种方式            List<String>    list    =    new    ArrayList<String>();    ...

  4. Python 安装matplotlib,six,dateutil,pyparsing 完整过程

    [摘要:正在做词频剖析的时间,须要用matlotlib 做图表,柱状图啥的,因而便最先了一个又一个的装置库的进程 由于matplotlib 须要依附很多其他科教盘算的第三圆库,须要一个一个的装置了.. ...

  5. CodeForces 525D Arthur and Walls

    广搜.看了官方题解才会的..... 定义2*2的小矩阵,有三个是点,一个是星,这样的小矩阵被称为元素块. 首先把所有元素块压入队列,每次取出对头,检查是否还是元素块,如果是 那么将那个*改为点,否则跳 ...

  6. JavaBean--JavaBean与表单

    SimpleBean.java: package cn.mldn.lxh.demo ; public class SimpleBean { private String name ; private ...

  7. Linux 安装 Redis 服务

    下载地址 http://download.redis.io/releases/redis-3.2.0.tar.gz 官网下载地址 http://redis.io/download 1.下载安装包 cd ...

  8. HDU 5875 st+二分区间

    题目大意:给你n个数,q次询问,每次询问区间[l, r],问a[i]%a[i + 1] % a[i + 2]...%a[j](j <= r)的值 思路:st预处理维护,再二分区间,复杂度n*(l ...

  9. stock 当天盘势

    看盘 (一)怎样看大盘当天的指数收阴.收阳 投资者每天都看大盘,但多数人看不准大盘.大盘到底当天是收阴,还是收阳?我通过很长时间的记录.验证,发现大盘在正常时间内,收阴.收阳是有规律的.我判断的准确率 ...

  10. Android, BaseAdapter 处理大数据量时的优化

    Android优化 最常见的就是ListView, Gallery, GridView, ViewPager 的大数据优化  图片优化  访问网络的优化优化的原则: 数据延迟加载  分批加载  本地缓 ...