【问题标题】:Difference bloom filters and FM-sketches差异布隆过滤器和 FM 草图
【发布时间】:2012-10-28 14:44:17
【问题描述】:

布隆过滤器和哈希草图(也是 FM 草图)有什么区别,它们的用途是什么?

【问题讨论】:

    标签: hash set duplicates counting bloom-filter


    【解决方案1】:

    哈希草图/Flajolet-Martin 草图

    Flajolet, P./Martin, G. (1985):用于数据库应用的概率计数算法,载于:计算机和系统科学杂志,第 1 卷。 31,第 2 期(1985 年 9 月),第 182-209 页。

    Durand, M./Flajolet, P. (2003):大基数的对数日志计数,载于:Springer LNCS 2832,算法 ESA 2003,第 605–617 页。

    哈希草图用于计算集合中不同元素的数量

    给定:

    • 长度为 l 的位数组 B[]
    • 映射到 [0,1,...2^l) 的(单个)哈希函数 h()
    • 一个函数 r(),它给出其输入的二进制表示中最低有效 1 位的位置(例如,000101 返回 1,001000 返回 4)

    元素 x 的插入:

    • pn := h(x) 返回一个伪随机数
    • 应用 r(pn) 将位数组的位置设置为 1 因为 h() 的输出是伪随机的,所以每个位 i 都设置为 1 ~n/(2^(i+1)) 次

    集合中不同元素的数量:

    • 找到位数组最右边0的位置p
    • p = log2(n),求解n得到集合中不同元素的个数; 结果可能最多相差 1.83 级

    用法:

    • 在数据挖掘、P2P/分布式应用程序、文档频率估计等方面。

    布隆过滤器

    Bloom, H. (1970):在允许错误的哈希编码中进行空间/时间权衡,载于:ACM 通信,卷。 13,第 7 期(1970 年 7 月),第 422-426 页。

    布隆过滤器用于测试一个元素是否是集合的成员

    给定:

    • 长度为 m 的位数组 B[]
    • k 个不同的哈希函数 h_k() 映射到 [0,...,m-1],即映射到 m 位数组的位置之一

    元素 x 的插入:

    • 对所有 k 应用 h_k 到 x (h_k(x)),即得到 k 个值
    • 将数组 B 中的结果位设置为 1(如果已设置为 1,则不要更改任何内容)

    检查 y 是否已经在集合中:

    • 获取位置 p_k 以使用所有哈希函数 h_k (h_k(y)) 进行检查,即对于每个函数 h_k,您将获得一个位置 p_k
    • 如果数组 B 中的位置 p_k 之一设置为 0,则元素 y 肯定不在集合中
    • 如果 p_k 给出的所有位置都是 1,则元素 y 可能 (!) 在集合中
    • 误报率约为 (1 - e^(-kn/m))^k,不可能出现误报!
    • 通过增加散列函数的数量,可以降低误报率;但是,与此同时,您的布隆过滤器会变慢; k 的最优值为 k = (m/n)ln(2)

    用法:

    • 最初用作数据库中的廉价过滤器,以过滤掉与查询不匹配的元素
    • 当今的各种应用,例如在 Google BigTable 中,还用于 IP 查找等网络中。

    【讨论】:

      【解决方案2】:

      Bloom Filter 是一种用于成员查找的数据结构,而 FM Sketch 主要用于元素计数。这两种数据结构提供了各自的解决方案,优化了执行查找/计算所需的空间,权衡的是结果的准确性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-12
        • 2011-09-22
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多