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 的取值是哪来的。

posted @ 2020-12-30 16:37  songoo  阅读(3628)  评论(0编辑  收藏  举报