hyperloglog基数统计原理分析
从LogLog说起,其算法完整的基数计算公式如下:
那么hyperloglog与loglog不同的是采取调和平均数,计算公式:
问题1:hyperloglog怎么去重,而避免重复计数?
hyperloglog将需要被存储的内容计算得到随机分布的hash编码(随机分布128位的hash编码可模拟伯努利过程),那么相同的内容计算的哈希编码相同,这么就实现了去重。
问题2:伯努利过程是通过大量的实验策略,hyperloglog小数据量存储精确度误如何保证低?
Hyperloglog调和平均数,调和平均数保证了,平均值会总体向小值偏近。
举个例子:有4个桶,每个桶有2个bit位。那么有字符串计算hash值后有4位:10001,取低二位被分配到第1个桶,取高3位第一次出现1的位置为第3位。
那么,当content=1,此时根据loglog,平均数计算: 2^((3+0+0+0)/4)=1.7,DVLL=14<