zoukankan      html  css  js  c++  java
  • 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算法类似思想,按照规则来计算,结果天知道、鬼知道、反正我不知道。

  • 相关阅读:
    呵呵
    geoserver中WMS服务详细说明
    Linux的用户和用户组管理
    linux ftp配置
    linux下vi命令大全
    linux基本命令大全
    Python ConfigParser
    java 小程序分析:参数传递
    java final
    java静态初始化块(静态域)
  • 原文地址:https://www.cnblogs.com/klarck/p/13581373.html
Copyright © 2011-2022 走看看