最近在学习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 简单理解的更多相关文章

  1. git的简单理解及基础操作命令

    前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...

  2. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  3. [转]简单理解Socket

    简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html  题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...

  4. Js 职责链模式 简单理解

    js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...

  5. Deep learning:四十六(DropConnect简单理解)

    和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...

  6. Deep learning:四十二(Denoise Autoencoder简单理解)

    前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...

  7. 简单理解dropout

    dropout是CNN(卷积神经网络)中的一个trick,能防止过拟合. 关于dropout的详细内容,还是看论文原文好了: Hinton, G. E., et al. (2012). "I ...

  8. 我们为之奋斗过的C#-----C#的一个简单理解

    我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET ...

  9. 简单理解ECMAScript2015中的箭头函数新特性

    箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...

  10. 简单理解JavaScript闭包

    很多关于JS的书籍例如<JavaScript权威指南>或者<高程>都把闭包解释的晦涩难懂,萌新们是怎么也看不懂啊!不过别怕,今天我就用很简单的方式给大家讲解下到底什么是闭包.这 ...

随机推荐

  1. SQL Server 5105 和 1802 错误的触发方式和解决方式之一

    一般导致这两个错误的原因是:文件路径错误 还有的说,可能是文件权限问题,详情见权限错误纠正方式 错误代码 create database teaching on primary ( name = te ...

  2. 远程连接到轻量应用服务器PG数据库

    不建议这样做,但是开发时方便需要.进入正题. PG是不支持远程连接的,需要连接直接该参数. 在其data目录里,有二个配置文件: pg_hba.conf:配置数据库的访问权限 postgresql.c ...

  3. 7. RabbitMQ 消息队列——延时队列(Spring Boot + 安装message_exchange"延迟插件" 的详细配置说明)的详细讲解

    7. RabbitMQ 消息队列--延时队列(Spring Boot + 安装message_exchange"延迟插件" 的详细配置说明)的详细讲解 @ 目录 7. Rabbit ...

  4. 看过源码吗?说下 Spring 由哪些重要的模块组成?

    是的,Spring源码可以深入分析,Spring框架是一个庞大的生态系统,包含多个模块,每个模块都为不同的功能提供支持.以下是Spring的主要模块及其职责: 1. Core Container(核心 ...

  5. 再见,SSE!你好,Streamable HTTP!轻松开发 Streamable HTTP MCP Server

    大家好!我是韩老师. 之前和大家分享了三篇 MCP 相关的文章: Code Runner MCP Server,来了! 从零开始开发一个 MCP Server! 一键安装 MCP Server! 还是 ...

  6. hadoop部署安装(三)zookeeper+yarn

    1. 配置zookeeper 3.1 解压存放指定目录 [root@bogon src]# tar xf zookeeper-3.4.10.tar.gz [root@bogon src]# mv zo ...

  7. RabbitMQ队列和消息的优先级

    RabbitMQ队列和消息的优先级 如果队列中的消息很多,需要一部分消息被优先消费,这是可以通过为消息和队列设置优先级来实现. 请注意,消息的优先级是相对于队列的优先级而言的.如果队列的最大优先级是1 ...

  8. Mybatis 框架课程第三天

    目录 1 Mybatis连接池与事务深入 1.1 Mybatis的连接池技术 1.1.1 Mybatis连接池的分类 1.1.2 Mybatis中数据源的配置 1.2 Mybatis 的事务控制 1. ...

  9. 【代码】JS|前端密码,浪漫至死不渝,祝我生日快乐

    今天是特别的日子,我想把这篇存稿发出来. 一次缺席,次次缺席,便不再期待重逢. 也是时候,解开最后一个设计过的谜题. 学加密的同时,我恰好写前端比较多,也有朋友找我测试他们前端页面上的加密方案的安全性 ...

  10. 操作系统综合题之“采用FCFS(先进先出)调度算法执行,计算进程平均带权周转时间”

    一.问题:有3个进程p1.p2.p3,其进入系统的时间和服务器时间如下表所示,按FCFS调度算法,她们的平均带权周转时间是多少(注:四舍五入精确到小数点后两位) 二.参考答案 答: p1周转时间 = ...