HyperLogLog算法流程小结

HyperLogLog介绍

给定一批设备id集,通过一定流程提取这批id集的特征,用很少的一批数字表示(提前存下来),把这批数字带入特定公式,即可快速预估出这批id集的数量(存在较小误差)。可用在用户画像项目中的标签圈选人群数量预估上(支持多标签交集并集预估,速度1s以下。由于各个标签组合取值枚举海量,不可能提前求出所有情况的数量。RoaringBitmap计算速度在5s左右,用户体验差)。

此算法流程简单,但理论证明复杂,如无必要,可只关注流程。

HyperLogLog流程

在这里插入图片描述

原理1

01010101...    // 最左侧1的位置是2
10111000...    // 最左侧1的位置是1
00001000...    // 最左侧1的位置是5
……

上面n个数,假定最左侧1的位置的最大值是10,那么n值接近2^10,
为了提高预估准确率,乘一个调整参数α,即最终预估n=α*(2^10)

原理2

// 思想
原理2对原理1改进,利用分组实验求平均值的思想,减少误差

// 流程
n个数分成m组(m=2^bits,bits由程序员指定),第j组最左侧1位置的最大值记为M[j],
那么预估n=α*m*(各组预估值即2^M[j]的调和平均值),α取值跟bits有关(理论证明给出对应固定值)

// 例子
假定bits=3,则用高3位数值+1为组号,分成2^3个组,剩余的位求最左侧1位置

010 10101...    // 组号为2+1,最左侧1的位置是1
101 11000...    // 组号为5+1,最左侧1的位置是1
000 01000...    // 组号为0+1,最左侧1的位置是2
……

HyperLogLog算法核心存储类HLL存储的就是M数组

原理3

HLL并集交集差集预估

// 并集
数据集A的HLL存储M1,数据集B的HLL存储M2,AUB的HLL存储的M求法是M[i]=max{M1[i], M2[i]}

// 交集
|A∩B| = |A| + |B| - |AUB|

// 差集
A - B = A - A ∩ B

Reference

[1] HyperLogLog: the analysis of a near-optimal cardinality estimation algorithm

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值