zoukankan      html  css  js  c++  java
  • 布隆过滤器

    布隆过滤器[1](Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的。它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率(假正例False positives,即Bloom Filter报告某一元素存在于某集合中,但是实际上该元素并不在集合中)和删除困难,但是没有识别错误的情形(即假反例False negatives,如果某个元素确实没有在该集合中,那么Bloom Filter 是不会报告该元素存在于集合中的,所以不会漏报)。

    直观的说,bloom算法类似一个hash set,用来判断某个元素(key)是否在某个集合中。
    和一般的hash set不同的是,这个算法无需存储key的值,对于每个key,只需要k个比特位,每个存储一个标志,用来判断key是否在集合中。

    算法:
    1. 首先需要k个hash函数,每个函数可以把key散列成为1个整数
    2. 初始化时,需要一个长度为n比特的数组,每个比特位初始化为0
    3. 某个key加入集合时,用k个hash函数计算出k个散列值,并把数组中对应的比特位置为1
    4. 判断某个key是否在集合时,用k个hash函数计算出k个散列值,并查询数组中对应的比特位,如果所有的比特位都是1,认为在集合中。

    优点:不需要存储key,节省空间

    缺点:
    1. 算法判断key在集合中时,有一定的概率key其实不在集合中
    2. 无法删除

  • 相关阅读:
    POJ 1392 Ouroboros Snake 欧拉回路
    POJ 1275 Cashier Employment 差分约束+二分答案
    POJ 1780 Code 欧拉回路+手写栈DFS
    POJ 1300 Door Man 欧拉路的判断
    HDU1534 Schedule Problem 差分约束
    POJ 3169 Layout 差分约束
    POJ 1364 King 差分约束 找负环
    ZOJ 2770 Burn the Linked Camp 差分约束+SPFA
    Zoj 2027 Travelling Fee 最短路变形
    Poj 2263 Heavy Cargo Floyd 求最大容量路
  • 原文地址:https://www.cnblogs.com/wbjgogogo/p/10036663.html
Copyright © 2011-2022 走看看