Skip to content

频繁项与 Heavy Hitters 问题

Heavy hitters · Frequent items

以范数阈值定义必须报告的高频坐标,并明确误差与假阳性区间。

定义族

对频率向量 (f),坐标 (i) 是 ((\phi,p)) heavy hitter,若

|fi|ϕfp.

取 (p=1) 或 (p=2) 分别得到 (\ell_1) 与 (\ell_2) 版本。在insertion-only 或 strict turnstile 流中频率非负,绝对值可以省略;general turnstile 允许正负抵消,必须保留它。近似输出还要定义必报区、必不报区与灰区。

流量大户是实例。Top-(k) 必须返回固定数量,即使第 (k) 与 (k+1) 名几乎相同;heavy hitters 按阈值,可能返回零项或多项,二者不等价。

Misra–Gries 状态

给定参数 (k),Misra–Gries 维护至多 (k-1) 个键计数器。新项命中候选则加一;有空槽则以计数 1 插入;否则所有计数器减一,并删除变为 0 的项。

取 (k=3),流为 (a,b,a,c,a,b)。状态依次是 ({a:1})、({a:1,b:1})、({a:2,b:1});读到 (c) 时全减并删除 (b),得到 ({a:1});最后两项使状态成为 ({a:2,b:1})。

真实频率为 (f_a=3,f_b=2,f_c=1)。候选计数不是精确频率:a 被低估 1,b 被低估 1。若接口需要输出真实超过阈值的项,可在允许二次扫描时只对候选重新计数。

配对不变量

每次全减可与“当前新项加 (k-1) 个候选项”这 (k) 个互异流位置配成一组并从分析中删除。全减次数至多 (m/k),所以保存计数从不超过真实频率,且每个键的低估至多 (m/k)。

任何频率严格大于 (m/k) 的键都不可能在这些互异组中被全部消去,因而一定留在候选表。这个证明依赖所有更新都是正的一次出现;给计数器直接处理负更新会失去“删除互异组”的证据。

(\ell_1)、(\ell_2) 与 top-k

插入流中 (\phi)-(\ell_1) heavy hitter 最多 (1/\phi) 个。General turnstile 的正负抵消要求明确取绝对频率和范数;CountSketch 用随机符号估计,并给出与去掉大坐标后的 (\ell_2) 尾部相关的误差,适合这类模型。

频率 ((100,99,98)) 的 top-2 必须区分 99 与 98;阈值 (0.2\lVert f\rVert_1) 却可能把三者都报出。没有 frequency gap 时,固定名次对微小误差敏感,而 heavy-hitter 规格通过必报区、必不报区和灰区表达容忍度。

输出契约

完整规格应列出必报区、必不报区、灰区、频率估计误差、失败概率、流模型和是否允许第二趟。只承诺候选表大小为 (O(1/\varepsilon)),不能推出无假阴性或计数准确。

参考资料
  • Misra, Gries, “Finding Repeated Elements,” 1982.
  • Cormode, Hadjieleftheriou, “Finding Frequent Items in Data Streams,” VLDB 2008.