“在只需近似基数且可接受随机误差时,Flajolet–Martin 与 HyperLogLog用哈希值前导零和分桶寄存器压缩已见集合。它们适合 insertion only、去重计数和参数一致…”
形式陈述 ​
极值信号 ​
把不同元素计数中的每个元素用从足够独立、输出近似均匀的通用哈希族选出的函数映为长位串,令
FM 与 HLL ​
Flajolet–Martin 可用 bitmap 记录见过的 ranks,再由首个空位估计;单一极值方差较大,需多哈希/分组。HyperLogLog 用哈希前
调和聚合抑制少数异常大寄存器,相对标准误差约
直觉
罕见事件图像 ​
出现 rank 20 意味着观察到概率约
例子与边界
合并与边界 ​
两个 HLL 若使用相同哈希、桶数和 rank 定义,可逐寄存器取 max 得并集摘要。哈希偏差、对抗输入、少基数和哈希空间饱和都会产生系统误差;实际 HLL++ 使用小范围修正与偏差校准,常数须匹配版本。结果是概率估计,不是置信区间或确定上下界。
重复项与寄存器空间 ​
同一元素重复到达总产生相同桶与 rank,寄存器 max 不变,所以摘要天然估 distinct 而非流长度。每个寄存器只需存到哈希位宽的 rank,位数为
小基数时许多寄存器仍为零,linear counting 修正利用零寄存器比例;大基数接近哈希空间时碰撞饱和。直接在所有范围都用原始调和公式会产生已知偏差。
寄存器状态的数值轨迹 ​
取 [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 被吸收。
哈希位的拆分必须固定:前
寄存器可按固定小位宽紧凑打包,但更新某一字段时要掩码写回,避免进位污染相邻字段。由高精度摘要降采样到较小
推论与应用
HLL 的逐寄存器 max 使分片摘要能在哈希配置一致时合并为并集基数估计,适合独立访客、去重计数与分布式监控。它只恢复基数而不恢复成员;需要列举元素、支持一般删除或抵抗已知哈希的对抗输入时,必须换用带不同状态契约的结构。
参考资料
- Philippe Flajolet, G. Nigel Martin, Probabilistic Counting Algorithms for Data Base Applications, JCSS, 1985.
- Philippe Flajolet et al., HyperLogLog: The Analysis of a Near-Optimal Cardinality Estimation Algorithm, AOFA, 2007.