Hyper loglog 简单理解
最近在学习redis, 看到hyper loglog 有这么近乎作弊的空间复杂度
着实好奇
其核心使用了概率统计 通过局部判断总体
- loglog
我们的任务是基数统计 判断不重复子串数量
字串由0/1排列而成
这就是典型的二项分布, 分布概率均为1/2
那不就是正态分布

当0与1数量相差小时集中在 x = μ上 当0与1数量相差大时集中在两端
可见当字串0/1分布越极端概率越小
假设 μ左侧为1多情况, μ右侧为0多情况
我们仅取一端 0多情况 简单用局部(50%)估计总体(100%)
而hyper loglog采用的就是 从右向左数没遇到1时数的0的个数m 保存这段数据中Max(m1, m2, …)
Max(m1, m2, …)中0的个数越多概率越小 反应基数数据量越大
- hyper 部分
针对了极端情况进行了优化
当基数极小却意外取到了大量的0 ,那基本就gg了
此时我们将数据分片, 每个片再依次求基数量, 取平均数 * 片数量
调和平均数 和 一般平均数
倘若 A工资为 1000 B工资为 30000
一般平均数下 工资为 ( 30000+1000 ) / 2 = 15500
而调和平均数 2/( 1/1000 + 1/30000 ) ≈ 1935.484
显然在调和平均数的计算下 更不容易受到大值的影响

调和平均数
即有公式

Hyper loglog 简单理解的更多相关文章
- git的简单理解及基础操作命令
前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- [转]简单理解Socket
简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html 题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...
- Js 职责链模式 简单理解
js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...
- Deep learning:四十六(DropConnect简单理解)
和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...
- Deep learning:四十二(Denoise Autoencoder简单理解)
前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...
- 简单理解dropout
dropout是CNN(卷积神经网络)中的一个trick,能防止过拟合. 关于dropout的详细内容,还是看论文原文好了: Hinton, G. E., et al. (2012). "I ...
- 我们为之奋斗过的C#-----C#的一个简单理解
我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET ...
- 简单理解ECMAScript2015中的箭头函数新特性
箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...
- 简单理解JavaScript闭包
很多关于JS的书籍例如<JavaScript权威指南>或者<高程>都把闭包解释的晦涩难懂,萌新们是怎么也看不懂啊!不过别怕,今天我就用很简单的方式给大家讲解下到底什么是闭包.这 ...
随机推荐
- Math类、System类--java进阶day05
1.Math类 Math类里所有方法都被static修饰,说明它是一个工具类,不需要创建对象,直接类名调用 2.Math方法展示 . 3.System类 SYstem方法展示 1.currentTim ...
- 【Java】异常处理
异常的定义 异常:在Java语言中,将程序执行中发生的不正常情况称为"异常". (开发过程中的语法错误和逻辑错误不是异常) 1. 异常的体系结构 Java程序在执行过程中所发生的异 ...
- 【QT】使用Qxlsx读取Excel单元格中函数表达式的结果值
[QT]使用Qxlsx读取Excel单元格中函数表达式的结果值 零.起因 是这样的,目前朋友托我写一款模板生成软件,任务是先把他写的程序文件复制一份出来,然后再根据Excel中对应位置的单元格的值,修 ...
- SQL 和 PL/SQL 的区别
不经意看到2个ORA错误,一个提示PL/SQL ORA-错误,另一个提示SQL ORA-错误,好奇这2货啥区别?留爪. PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Lan ...
- 2024 蓝桥杯模拟赛3(div1+div2)
2024 蓝桥杯模拟赛3(div1+div2) P8834 [传智杯 #3 决赛] 序列 简单的模拟,数据范围很小,暴力即可 点击查看代码 #include <bits/stdc++.h> ...
- IDEA强制注册登录版本号:IntelliJ IDEA 2021.2.2
建议采用 IntelliJ IDEA 2021.2.2 版本进行 Evaluate for free 试用 IntelliJ IDEA 2021.3.3 以前的版本可以不用注册登录idea账户, ...
- python Response的语法
-- r.status_code #响应状态码 -- r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩 -- r.headers #以字典对象存储服务器响应头 ...
- Hangfire Redis 实现秒级定时任务、使用 CQRS 实现动态执行代码
目录 定时任务需求 核心逻辑 使用 Redis 实现秒级定时任务 第一步 第二步 第三步 第四步 业务服务实现动态代码 第一步 第二步 第三步 第四步 第五步 最后 定时任务需求 本文示例项目仓库:w ...
- SpringBoot Task定时任务
参数详解 @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) ...
- Manus爆火,我发现平替开源项目OpenManus带你玩转AI智能体开发,无需邀请码!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "在AI技术日新月异的今天,OpenManus像一把打开智能体开发大门的万能钥匙, ...