关于HLL算法分析的一点记录

经过一段时间的努力,发现想要以自己目前的知识储备完全理解HyperLogLog相关的几篇文章是困难的,
其中的数学相关细节,需要恶补复变函数以及概率统计相关的知识,
上学的时候没有开复变的课,自己也没有主动去学习,导致对相关的留数,梅林变化等内容一无所知,
概率虽然学过但是只是皮毛(没有涉及测度),而且基本上已经忘的差不多了,
两个加在一起,暂时决定不再对其中的数学原理进行全部读懂理解,
后续有时间再重新学习下复变函数和概率相关的知识,再来尝试完全理解和推导。

下面是这段时间阅读相关文档的理解:

HLL大致的数量级和Linear counting的数量级是一致的, 区别主要在于细致的参数调优方面
Linear counting计算DV其中关键的有个极限求值
limit(1-u/n)^n ,让y=(1-u/n)^n,则 lny=n*ln(1-u/n) 令 x= 1/n, 则得 lny=ln(1-ux)/x 上下使用洛必达法则,可得(-u/1-ux)/1
当n->∞时,x->0, (-u/1-ux)/1 -> -u 所以 lny = -u => y = e ^-u

HyperLogLog由下面三个主要改进

1用调和平均代替算术平均, 因为调和平均对小值更加敏感

2文献Hyperloglog The analysis of a near-optimal cardinality estimation algorithm
主要贡献了常数αm,其中的分析主要用到了梅林变化展开后的数值分析

3文献New cardinality estimation algorithms for HyperLogLog sketches
主要改进了C(0)和C(q+1),定义了σ和τ函数, 从而使公式以统一的方式出现

在现在版本的redis中DV的计算是采用了文献New cardinality estimation algorithms for HyperLogLog sketches的方法

posted on 2021-04-21 16:36  子虚乌有  阅读(567)  评论(0)    收藏  举报