帮助理解HyperLogLog算法
作者:ScroogeACarol
时间:内容于2020.11.24经检验生效
在学习HyperLogLog算法的时候在网上翻阅了大量帖子,这些帖子在许多地方没能写通透,本人几经波折,才弄懂这个算法原理。为帮助后人理解HyperLogLog,我用自己的语言,尽可能写一篇易于理解的帖子。本文所写的HyperLogLog算法为Redis中使用的,实际该算法可以根据自己的需要进行调整,思路上大同小异。
1、介绍HyperLogLog
HyperLogLog的价值
首先由一个问题来引出:
假设我们需要统计一个网页一天被访问多少次,这很简单,每被访问一次,计数器加1就行了。但如果需要你统计一个网页一天有多少个用户访问,这要如何实现呢?注意,一个用户重复访问多次,仍然只算一次。
对于一般思路,是对每个访问的用户进行标识,当这个用户二次访问的时候,计数器不变就行了。
这是最精确的统计方法,但是我们需要开辟一个空间用以标识所有到访的用户。如果到访的用户量很大很大,这个空间也将很大很大。
假设我们统计的不是用户,而是别的什么东西,统计量达到了2^64数量级,那么相应的,我们或许要开辟100M的空间才能精确地统计。
而实际上,面对海量的数据,我们需要的往往并不是一个精确的值,而是一个估计值。对我们来说,今天统计出1000个