• 布隆过滤器


    布隆过滤器

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

    算法流程

    如果我们要映射一个值到布隆过滤器中,我们可以使用多个不同的哈希函数生成多个哈希值,并对每个生成的哈希值指向的 bit 位置 1:

    当查询某一个值是否存在集合中的是否,则同样经过相同次数的哈希运算,若映射到的每个bit位都为1,那么说明该元素有可能属于该集合,否则则说明该元素一定不属于该集合。

    误差率表

    (m)表示过滤器的bit位数,(n)为总的输入数据量,(k)为哈希函数的个数,那么判断一条不存在的数据却返回存在结果的误差率(p)为:

    [p=left(1-e^{frac{-nk}{m}} ight)^k ]

    下面是m/n和k的值对p的影响统计表:

  • 相关阅读:
    linux安装nginx
    git配置多个SSH密钥
    webpack加载器安装node-sass失败的解决方法
    Vue-cli webpack打包之后index.html缺少引号的问题
    算法:一个数组中所有元素的最小公倍数
    JS 实现一个睡眠函数sleep
    剑指offer 牛客67道题集合
    剑指offer
    剑指offer
    剑指offer
  • 原文地址:https://www.cnblogs.com/HachikoT/p/13948244.html
Copyright © 2020-2023  润新知