zoukankan      html  css  js  c++  java
  • Count-Min Sketch 算法

    本文转自:https://zhuanlan.zhihu.com/p/84688298

    1. Count-Min Sketch

    Count-Min Sketch 是数据库中用到的一种 Sketch,所谓 sketch 就是用很少的一点数据来描述全体数据的特性,牺牲了准确性但是代价变得很低。

    CM-Sketch 的数据模型是这样的:

    有一个维度为n 、不断变化的向量(t 表示时间戳)

    [公式]

    每个时间 t上会发生一个更新操作,将其中某一个值加上 c,其他值不变

    [公式]

    尽管论文还讨论了一些更 general 的情形,我们这里可以简单地理解为,CM-Sketch 要拟合的的数据模型类似一个哈希表加上计数器:假设有一个数据集合里有 n 个 distinct values,a表示编号为 i 的值出现的次数,每次更新都在修改这个计数器。

    CM-Sketch 作为一个 sketch,目的是用相对小的代价,实现以下几种查询(近似结果)

    • [公式] 查询编号为 i 的元素出现的次数(主要功能)
    • [公式] 查询编号在 [公式] 范围内的元素出现的总次数 [公式]
    • [公式] 查询 inner product:[公式]
    • [公式]-Quantiles
    • Heavy Hitters

    2. 实现

    CM-Sketch 的内部数据结构是一个二维数组 count,宽度 w,深度 d,此外还需要 d 个两两独立的哈希函数 h1...hd

    更新的时候,用这些哈希函数算出 d 个不同的哈希值,然后把对应的行的值加上 c。

    这里的取值是有讲究的:

        [公式], [公式],两个参数的含义是:在 [公式] 的概率下,总误差(所有元素查询误差的之和)小于 [公式] 。

     

    3. 结果近似性

    这里以 Q(i) 为例,它的近似结果是:

    [公式]

    也就是所有哈希到的 count 取最小值。显然真实值一定比这个值更小或者相同,那我们只要证明这个值不会比真实值大太多。

    要证的结论:

    [公式]

    证明如下:

    1) 定义指示变量 [公式] 表示哈希函数 [公式] 对于元素 [公式] 和 [公式] 是冲突的:他们俩被哈希到同一个 slot 上。站在元素 [公式] 的角度上看,由于 [公式] 哈希碰撞,导致元素 [公式] 的计数加到自己的计数上了。

    [公式]

    2) 定义随机变量 [公式] ,表示所有元素的 [公式] 的加和。它表示:哈希函数 [公式] 未知的情况下,所有元素的总误差。

    [公式]

    3) 运用马尔可夫不等式,把期望的 bound 转换成概率的 bound

    [公式]

    这也解释了我们之前看到的 d 和 w 的取值是哪来的。

  • 相关阅读:
    Java异常超详细总结
    ArrayList去除集合中字符串的重复值
    scrum项目冲刺_day09
    scrum项目冲刺_day08
    scrum项目冲刺_day07
    scrum项目冲刺_day06
    scrum项目冲刺_day05
    scrum项目冲刺_day04
    scrum项目冲刺_day03
    scrum项目冲刺_day02
  • 原文地址:https://www.cnblogs.com/songwenlong/p/14212194.html
Copyright © 2011-2022 走看看