Skip to content

方法Method

Flajolet–Martin 与 HyperLogLog

施工中 · 内容逐步修订

Flajolet-Martin · HyperLogLog · HLL

用哈希位串中的罕见前导零事件估计不同元素数,并以多寄存器调和聚合降低方差。

形式陈述 ​

哈希模型与稀有位串 ​

本页选择不同元素计数的单位插入版本。固定输入流,并在理想分析中让不同键的哈希值是相互独立的均匀无限位串;同一键每次返回同一位串。仅有通用哈希的两键碰撞上界,还不足以推出下面的 rank 分布和基数估计定理。

令 ρ 为首个 1 的位置,从 1 开始编号。对整数 r≥1,

Pr(ρ≥r)=2−(r−1),Pr(ρ=r)=2−r.

前一个事件只要求前 r−1 位为零,后一个还要求第 r 位为一。对 D≥1 个不同键,若 R 是最大 rank,则

Pr(R<r)=(1−2−(r−1))D.

因此 R 的典型量级接近 log2⁡D,但单个长零串只能提供随机信号。

FM 位图与 HLL 寄存器 ​

Flajolet–Martin 用位图记录已经出现的 ranks,再由首个未出现的 rank 构造估计,并用重复或分组降低波动。HyperLogLog(HLL)选择 m=2p 个寄存器:哈希前 p 位只决定桶号 j,剩余位才计算 ρ,更新 Mj←max(Mj,ρ)。以下选择常用的零初态实现 Mj=0,原始估计为

E=αmm2(∑j=1m2−Mj)−1.

理论定理采用精确归一化

αm=[m∫0∞(log2⁡2+u1+u)mdu]−1.

固定 m=2p≥16,沿键宇宙足够大的实例族让基数 D→∞,原论文 Theorem 1 给出

EE−DD=δ1,m(D)+oD(1),Var(E)D=βmm+δ2,m(D)+oD(1).

这里 |δ1,m(D)|<5×10−5、|δ2,m(D)|<5×10−4;它们是对数尺度上的微小振荡项,并非被 oD(1) 吸收的消失项。主要标准差系数例如 β16≈1.106、β128≈1.046;另沿二次幂寄存器数令 m→∞,才有 βm→3ln⁡2−1≈1.039。常见的约 1.04/m 是对这个主要项的简写,不是任意有限 D 的置信保证。

Theorem 1 的原始表示把未见桶设为 −∞,有空桶时估计为零。对每个固定 m,零初态与它具有相同的大 D 渐近式:两者只在仍有空桶时不同;对 m 个“第 j 桶为空”事件应用并集界,该事件概率至多 m(1−1/m)D,且零初态估计在该事件上至多为 αmm2,所以前两阶矩的差指数衰减。

实现中的校准还要另外区分。原论文 Figure 3 采用舍入值 a16=0.673、a32=0.697、a64=0.709,以及 m≥128 时的近似式 am=0.7213/(1+1.079/m)。用 am 替换精确 αm 会把同一原始估计乘以固定因子 cm=am/αm;相对偏差因而增加 cm−1,原振荡项与标准差也乘以 cm。这项校准偏差不会仅因 D 增大而消失,不能与初始化差异混为一谈。

直觉

罕见事件图像 ​

出现 rank 恰为 20 的位串,其概率是 2−20;出现 rank 至少为 20 的概率则是 2−19。这样的稀有信号提示了较大的不同元素规模;它不是确定下界,因为少量元素也可能偶然产生长零串。多个桶提供许多近独立局部实验,才让估计稳定。

例子与边界

合并与边界 ​

两个 HLL 若使用相同哈希、桶数和 rank 定义,可逐寄存器取 max 得并集摘要。哈希偏差、对抗输入、少基数和哈希空间饱和都会产生系统误差;实际 HLL++ 使用小范围修正与偏差校准,常数须匹配版本。结果是概率估计,不是置信区间或确定上下界。

重复项与寄存器空间 ​

同一元素重复到达总产生相同桶与 rank,寄存器 max 不变,所以摘要天然估 distinct 而非流长度。若实现使用 b>p 位哈希,后缀长 q=b−p,约定全零后缀的 rank 为 q+1。寄存器取值为 0,1,…,q+1,各需 ⌈log2⁡(q+2)⌉ 位,总计 m⌈log2⁡(q+2)⌉ 位,另计哈希描述和参数。只有额外选定 b=O(log⁡(U+1)) 时,才能将每寄存器上界写成 O(log⁡log⁡(U+2))。

空流在零初态原始公式下得到 E=αmm>0(舍入实现中为 amm)。原论文的常用小范围修正为:当 E≤(5/2)m 且零寄存器数 V>0 时,返回 mln⁡(m/V);否则在中间范围使用 E。空流有 V=m,修正后恰为零。这一切换规则及校准属于具体 HLL 实现,原论文还用实验检验其有限范围表现。

有限哈希空间有另一种限制:两个不同键一旦哈希完全相同,其后所有寄存器行为就相同;大基数接近 2b 时必须另做碰撞修正或改用更宽哈希。无限位串下的渐近式并不能保证固定 b 的估计器在 D→∞ 时继续有效。

寄存器状态的数值轨迹 ​

只为演示更新,取 p=2 的四寄存器玩具实例,不套用上述 m≥16 的校准与精度近似。初态 [0,0,0,0]。若不同元素的 (桶号,rank) 依次为 (0,1),(2,3),(0,4),(2,2),状态依次变为 [1,0,0,0]、[1,0,3,0]、[4,0,3,0],最后一次不再改变。这个轨迹同时展示 max 更新、空桶和较小 rank 被吸收。

哈希位的拆分必须固定:前 p 位只选桶,剩余位才计算 rank。若把同一批前缀位既用于桶号又计入前导零,桶选择与寄存器值产生相关性,标准误差分析不再适用。

寄存器可按固定小位宽紧凑打包,但更新某一字段时要掩码写回,避免进位污染相邻字段。由高精度摘要降采样到较小 p 需要重新映射桶并修正 rank;它不是简单截断寄存器数组。

推论与应用

HLL 的逐寄存器 max 使分片摘要能在哈希配置一致时合并为并集基数估计,适合独立访客、去重计数与分布式监控。它只恢复基数而不恢复成员;需要列举元素、支持一般删除或抵抗已知哈希的对抗输入时,必须换用带不同状态契约的结构。

参考资料
关系图谱5 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

使用的工具

实现的抽象