作者: 公敌依波拉 一剑破万法

HyperLogLog

HyperLogLog

基数计数,不绝对准确。省空间,速度快

估计基数,对数级空间节省

可以理解为一种压缩,把基数压缩成二进制位数,只存储位数,如果旧有的数据再加入时肯定不会改变位数。

反之回复成基数是2的幂,所以是个近似值。

多桶理解为多个位数,求平均数来近似,防止二的幂的近似太粗犷。

记得以前有个猜日期游戏,数据分五组

A:1,3,5,7,  9,  11,13,15,27,19,21,23,25,27,29,31

B:2,3,6,7,10,11,14,15,18,19,22,23,26,29,30,31

C:4,5,6,7,12,13,14,15,20,21,22,23,28,29,30,31

D:8,9,10,11,12,13,14,15,24,25,26,27,28,29,30,31

E:  16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31

游戏规则是:在上面五组中找出你的生日日期,把组名告诉对方,对方猜测你的生日日期,

例如告诉对方在abc三组,那么日期就是1+2+4=7

如果是ade三组,日期就是1+8+16=25,

依此类推,告诉是在哪个组就把组的第一个数字加一起,即是所求

HyperLogLog也是类似的算法,只不过把数据压缩,无法完全还原,反向计算找一个近似值,多桶计算多个近似,计算调和平均数。

有人说redis的桶个数是16834,我怎么想怎么不对。这个数太像2的14次幂16384了,怀疑是笔误,于是下载了redis源码,hyperloglog.c文件中,查看发现有16384这个数,没有16834这个数。

和hash算法类似思想,按照规则来计算,结果天知道、鬼知道、反正我不知道。

posted @ 2020-09-19 22:13  一剑破万法  阅读(553)  评论(0编辑  收藏  举报
作者: 公敌依波拉 一剑破万法
出处: https://www.cnblogs.com/klarck/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。