“在只需近似基数且可接受随机误差时,Flajolet–Martin 与 HyperLogLog用哈希值前导零和分桶寄存器压缩已见集合。它们适合 insertion only、去重计数和参数一致…”
“另一种可单独选择的输出规格是渐近偏差与相对标准差。固定单位插入流,对不同键使用独立均匀的无限哈希位串,同键复用其位串;先固定寄存器数 $M$,沿宇宙足以容纳 $D$ 个不同键的实例族令 $D…”
方法Method
施工中 · 内容逐步修订
Flajolet-Martin · HyperLogLog · HLL
用哈希位串中的罕见前导零事件估计不同元素数,并以多寄存器调和聚合降低方差。
本页选择不同元素计数的单位插入版本。固定输入流,并在理想分析中让不同键的哈希值是相互独立的均匀无限位串;同一键每次返回同一位串。仅有通用哈希的两键碰撞上界,还不足以推出下面的 rank 分布和基数估计定理。
令
前一个事件只要求前
因此
Flajolet–Martin 用位图记录已经出现的 ranks,再由首个未出现的 rank 构造估计,并用重复或分组降低波动。HyperLogLog(HLL)选择
理论定理采用精确归一化
固定
这里
Theorem 1 的原始表示把未见桶设为
实现中的校准还要另外区分。原论文 Figure 3 采用舍入值
出现 rank 恰为 20 的位串,其概率是
两个 HLL 若使用相同哈希、桶数和 rank 定义,可逐寄存器取 max 得并集摘要。哈希偏差、对抗输入、少基数和哈希空间饱和都会产生系统误差;实际 HLL++ 使用小范围修正与偏差校准,常数须匹配版本。结果是概率估计,不是置信区间或确定上下界。
同一元素重复到达总产生相同桶与 rank,寄存器 max 不变,所以摘要天然估 distinct 而非流长度。若实现使用
空流在零初态原始公式下得到
有限哈希空间有另一种限制:两个不同键一旦哈希完全相同,其后所有寄存器行为就相同;大基数接近
只为演示更新,取 [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 使分片摘要能在哈希配置一致时合并为并集基数估计,适合独立访客、去重计数与分布式监控。它只恢复基数而不恢复成员;需要列举元素、支持一般删除或抵抗已知哈希的对抗输入时,必须换用带不同状态契约的结构。