Skip to content

算法Algorithm

Count–Min Sketch

施工中 · 内容逐步修订

Count-Min Sketch · CMS

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

形式陈述 ​

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

结构与更新 ​

对从零开始的频率更新,取 0<ε<1、0<δ<1,以及正整数宽度 w、深度 d,每行独立地从满足碰撞概率上界的通用哈希族抽取 hj:[U]→[w]。更新 (i,Δ) 时对所有行执行

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

点查询返回 f^i=minjC[j,hj(i)]。

一侧误差证明 ​

固定与哈希随机性独立的频率向量 f≥0 和查询键 i。若 f=0,所有计数器为零,查询精确;以下设 ‖f‖1>0。每桶为 fi 加其他非负当前频率,所以永不低估;这同时适用于 insertion-only 和strict turnstile。固定一行的噪声期望至多 ‖f−i‖1/w;取 w=⌈e/ε⌉,由Markov 不等式噪声超过 ε‖f‖1 的概率至多 1/e。d=⌈ln⁡(1/δ)⌉ 行独立且取最小,使所有行都坏的概率至多 δ:

fi≤f^i≤fi+ε‖f‖1.

资源口径 ​

在哈希求值与计数器算术均按常数时间计的模型下,一次更新处理 d 行,耗时 O(d);一次点查询也耗时 O(d),因为它读取各行目标桶并取最小值。摘要保存 O(wd) 个计数器,另存所用哈希函数的描述。计数器位宽须按允许的流质量和更新幅度单独选择并计入空间;上述操作次数不是对任意精度整数的无条件位复杂度保证。

直觉

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

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

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

频率查询例子 ​

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

边界与保证类型 ​

误差是全局 L1 的加性误差,不是相对误差 εfi。Strict turnstile 允许负更新,但每个当前频率仍非负:碰撞键先 +3 再 −2,对桶的净贡献是 +1,不会破坏单边高估。一般 turnstile 允许负频率;若目标频率为 2,某碰撞键频率为 −3,该桶就为 −1,取 min 会低估。问题在当前频率的符号,而非更新的符号。哈希独立性、固定查询集合与自适应查询或更新的失败概率约定仍须分别核对。conservative update 是工程变体,不能沿用所有原始线性性质。

推论与应用

合并与范围聚合 ​

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

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

从固定查询到查询集合 ​

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

计数器还要按流总质量选择位宽。若使用饱和整数,热门桶到上限后便不再是频率向量的线性映射;若发生无符号回绕,min 甚至可能严重低估。因此要选用足够宽的计数器,或明确报告溢出策略带来的额外误差。

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

参考资料
关系图谱15 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。

类型化关系