HyperLogLog

Go 语言对 HyperLogLog 和 HyperLogLog++ 算法的实现
授权协议 MIT
开发语言 Google Go
所属分类 程序开发、 其他开发相关
软件类型 开源软件
地区 不详
投 递 者 谷梁昊空
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

该项目是 Go 语言对 HyperLogLog 和 HyperLogLog++ 算法的实现。

HyperLogLog paper: http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf

HyperLogLog++ paper: http://research.google.com/pubs/pub40671.html

算法比较

对于小基数,HyperLogLog ++算法的错误要低得多。这是因为它对少量数据集使用不同的数据表示形式。使用该库生成的数据显示出N <10000的差:

N <10000

HyperLogLog ++还具有偏差校正功能,可帮助抵消原始HyperLogLog算法中的估计误差。再次使用此库生成的数据,可以在此处看到此更正:

N <80000

  • 目录 1.使用方法 2.注意事项 3.实现原理 在介绍HyperLogLog之前,我们先思考一个常见的业务问题:如果开发一个大型网站,要记录每个网页每天的UV数据,我们应该如何实现呢? 如果统计PV那非常容易,给每个网页一个独立的Redis计数器就可以了,这个计数器的key后缀加上当天的日期。这样来一个请求,incrby一次,最终就可以统计出所有的PV数据。但是UV不一样,它要去重,也许我们可以想

  • 1. 概述 Redis 在 2.8.9 版本添加了 HyperLogLog 数据结构,用来做基数统计,其优点是在输入元素的数量非常大时,计算基数所需的空间比较小并且一般比较恒定。 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存越多的集合形成鲜明对比。但是,因为 HyperLogLog 只

  • 系列文章目录 一、HyperLogLog是什么? HyperLogLog并不是一种新的数据结构(实际类型为字符串类 型),而是一种基数估算算法。所谓基数估算,就是估算在一批数据中,不重复元素的个数有多少。通过HyperLogLog可以利用极小的内存空间完成独立总数的统计,数据集可以是IP、Email、ID等。 二、HyperLogLog应用场景 根据HyperLogLog的特性可知,该技术可应用于

 相关资料
  • 主要内容:Redis HyperLogLog,1.什么是基数?,2.实例,3.Pfadd,4.Pfcount,5.PFMERGERedis HyperLogLog Redis 在 2.8.9 版本添加了 HyperLogLog 结构。 Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,

  • PFCOUNT key [key ...] 当只给定一个 HyperLogLog 时,命令返回给定 HyperLogLog 的基数估算值。当给定多个 HyperLogLog 时,命令会先对给定的 HyperLogLog 进行并集计算,得出一个合并后的 HyperLogLog ,然后返回这个合并 HyperLogLog 的基数估算值作为命令的结果(合并得出的 HyperLogLog 不会被储存,使用

  • PFMERGE destkey sourcekey [sourcekey ...] 将多个 HyperLogLog 合并为一个 HyperLogLog ,合并后的 HyperLogLog 的基数估算值是通过对所有给定 HyperLogLog 进行并集计算得出的。 命令的复杂度为 O(N) , 其中 N 为被合并的 HyperLogLog 数量, 不过这个命令的常数复杂度比较高。

  • 我最近在业余时间学习了不同的算法,我遇到的一个看起来非常有趣的算法叫做超级日志算法——它估计一个列表中有多少独特的项目。 这对我来说特别有趣,因为它让我回到了我的MySQL时代,那时我看到了“基数”值(直到最近我一直认为它是计算出来的,不是估计出来的)。 所以我知道如何用O(n)编写一个算法,计算数组中有多少个唯一项。我是用JavaScript写的: 但问题是,我的算法虽然是O(n),但使用了大量

  • PFADD key element [element ...] 这个命令可能会对 HyperLogLog 进行修改,以便反映新的基数估算值,如果 HyperLogLog 的基数估算值在命令执行之后出现了变化, 那么命令返回 1 , 否则返回 0 。 命令的复杂度为 O(N) ,N 为被添加元素的数量。

  • HyperLogLog主要解决大数据应用中的非精确计数(可能多也可能少,但是会在一个合理的范围)操作,它可以接受多个元素作为输入,并给出输入元素的基数估算值,基数指的是集合中不同元素的数量。比如 {‘apple’, ‘banana’, ‘cherry’, ‘banana’, ‘apple’} 的基数就是 3 。 HyperLogLog 的优点是,即使输入元素的数量或者体积非常非常大,计算基数所需的