Skip to content

Count–Min Sketch

Count-Min Sketch · CMS

用多行哈希计数器给非负频率提供不低估、带全局 L1 加性误差的点查询。

条目类型
算法

形式陈述

Count–Min 是线性 Sketch的一个实例:计数表可写成频率向量经固定随机矩阵的线性映射,而查询时的逐行最小值是施加在摘要之上的非线性解码器。

结构与更新

取宽度 w、深度 d,每行独立地从满足碰撞概率上界的通用哈希族抽取 hj:[U][w]。更新 (i,Δ) 时对所有行执行

C[j,hj(i)]+=Δ.

点查询返回 f^i=minjC[j,hj(i)]。矩阵对频率向量是线性的,但取最小的估计步骤不是线性映射。

一侧误差证明

在 insertion-only 非负流中,每桶为 fi 加其他碰撞项,所以永不低估。固定一行的噪声期望至多 fi1/w;取 w=e/ε,由Markov 不等式噪声超过 εf1 的概率至多常数。d=ln(1/δ) 行独立且取最小,使所有行都坏的概率至多 δ

fif^ifi+εf1.
直觉

每一行都把目标频率与碰撞噪声加在同一个桶里;在非负流中噪声只能向上推高估计。多行独立哈希后取最小值,相当于等待至少一行避开严重碰撞,因此保留“不低估”的方向并把同时坏掉的概率指数压低。

多行哈希碰撞与逐行最小值
例子与边界

Count–Min 对非负频率使用无符号桶和逐行最小值,碰撞只会造成单边高估;CountSketch加入随机符号并取中位数,误差围绕真实频率摆动,更适合 turnstile 流和 2 尾部保证。

频率查询例子

统计 API 路径请求量时,每次请求把对应键加一。冷门路径可能因热门路径碰撞被高估,但多行中只要一行避开主要碰撞,最小值就恢复较小误差;结构不会把真实请求数估得更低。

边界与保证类型

误差是全局 L1 的加性误差,不是相对误差 εfi。严格 turnstile 的负更新会让碰撞项可正可负,破坏“只高估”和 min 逻辑;需其他 sketch。哈希独立性、一次固定查询与许多自适应查询的失败概率不同。conservative update 是工程变体,不能沿用所有原始线性性质。

推论与应用

合并与范围聚合

使用相同 d,w 和同一组哈希函数的两个 sketch 可逐计数器相加,得到串接两条流的 sketch;函数不同则桶语义不一致,不能合并。这个性质来自每行计数的线性更新。

若键有顺序,不能直接从单个 CMS 回答任意范围和,因为哈希打散顺序;可在 dyadic interval 层级各维护 sketch,把范围分解成 O(logU) 个节点,但误差与失败概率也要跨节点累积。

从固定查询到查询集合

上述概率界先固定一个键 i。若系统预先知道要同时保证 q 个键,可把单键失败率设为 δ/q,即把深度增至 d=ln(q/δ),再用 union bound 得到整组查询共同成功的概率至少 1δ。查询由先前答案自适应生成时,这个直接换参并不自动成立。

计数器还要按流总质量选择位宽。若使用饱和整数,热门桶到上限后便不再是频率向量的线性映射;若发生无符号回绕,min 甚至可能严重低估。工程实现必须把溢出策略作为误差模型的一部分,而不是把它归入哈希碰撞误差。

CMS 只提供候选键的点估计,不会自行列出 heavy hitters。若宇宙很大,仍需 Misra–Gries、分层编码或外部候选生成器;对全宇宙逐键查询虽正确,却要 Θ(Ud) 时间。

参考资料
  • Graham Cormode, S. Muthukrishnan, An Improved Data Stream Summary: The Count-Min Sketch and Its Applications, J. Algorithms, 2005.
  • Graham Cormode, Ke Yi, Small Summaries for Big Data, Cambridge University Press, 2020.
关系图谱11 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。

类型化关系

使用的工具

并列辨析