萌新笔记——Cardinality Estimation算法学习(二)(Linear Counting算法、最大似然估计(MLE))
在上篇,我了解了基数的基本概念,现在进入Linear Counting算法的学习。 理解颇浅,还请大神指点!
http://blog.codinglabs.org/articles/algorithms-for-cardinality-estimation-part-ii.html
它的基本处理方法和上篇中用bitmap统计的方法类似,但是最后要用到一个公式:

说明:m为bitmap总位数,u为0的个数,最后的结果为n的一个估计,且为最大似然估计(MLE)。
那么问题来了,最大似然估计是什么东东?好像在学概率论的时候听说过,于是又去搜索了一下MLE的信息。
MLE:(此处不使用概率论中的各种符号及表示方法,按我自己的理解写)
以下内容参考链接:http://blog.csdn.net/yanqingan/article/details/6125812
假设进行一个实验,实验次数定为10次,每次实验成功率为0.2,那么不成功的概率为0.8,用n来表示成功的次数。
事件之间是相互独立的,于是可以得到成功次数的概率:

| 成功次数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 概率 | 0.107374 | 0.268435 | 0.301990 | 0.201327 | 0.088080 | 0.026424 | 0.005505 | 0.000786 | 0.000074 | 0.000004 | 0.000000 |
以上数据由下述程序计算:
#include <stdio.h>
#define N 10
#define G 0.2 int factorial(int n)
{
int i;
int ret = ;
for(i = ; i <= n; ++i)
{
ret *= i;
}
return ret;
} double exponent(double m, int n)
{
int i;
double ret = ;
for(i = ; i < n; ++i)
{
ret *= m;
}
return ret;
} double fun(int n)
{
return ((double)factorial(N) / factorial(n) / factorial(N - n) * exponent(G, n) * exponent( - G, N - n));
} int main()
{
int i;
for(i = ; i <= N; ++i)
{
printf("%f\t", fun(i));
}
printf("\n");
}
用excel做出它的图表

而所谓概率密度,就是这一个个柱子的面积。公式如下:

所谓的最大似然估计,就是在已知成功次数n的情况下,求出每次实验成功率的最可能的值。
假设现已知成功次数为n=7,那么每次的成功概率ω可能是多少呢?
可以代入式子:

于是它成了P和ω的方程。
既然成功次数为7,那么假设n=7时,P有极大值,即求上述方程极大值。借助excel,画出它的方程曲线图:

即先求导,然后取导数的0点,即为最大可能概率:

但是这样做又不方便,又容易出错,于是可以借助对数来进行处理:

这样继续求解是不是方便多了呢?
现在回到Linear Counting算法(具体一开始头上带^的n是怎么推导的可以查看一下开关的链接,或者“A linear-time probabilistic counting algorithm for database applications”)
Linear Counting算法中,m是比n小的。我并不知道应该如何描述它,于是按个人的理解举个例子:
假设一个网站一天有n个不同的人访问,现设一m位的bitmap,将“不同的人”传入哈希函数,传出的结果填入bitmap(可能重复),最后用bitmap中的分布情况来估计n的值。
引用链接中的一个图:

每个圈代表一个人,然后用bitmap中的分布情况估计出圈的个数。
这样的估计是有误差的,所以应该对m的选择考虑一番。
结论:Linear Counting算法比直接用bitmap节约了常系数极的空间
萌新笔记——Cardinality Estimation算法学习(二)(Linear Counting算法、最大似然估计(MLE))的更多相关文章
- 萌新笔记——Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)
最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对"基数"以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了"HyperLo ...
- Cardinality Estimation算法学习(二)(Linear Counting算法、最大似然估计(MLE))
在上篇,我了解了基数的基本概念,现在进入Linear Counting算法的学习. 理解颇浅,还请大神指点! http://blog.codinglabs.org/articles/algorithm ...
- CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现
CRC16算法系列文章: CRC16算法之一:CRC16-CCITT-FALSE算法的java实现 CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现 CRC16算法之三:CR ...
- 萌新笔记——C++里创建 Trie字典树(中文词典)(二)(插入、查找、导入、导出)
萌新做词典第二篇,做得不好,还请指正,谢谢大佬! 做好了插入与遍历功能之后,我发现最基本的查找功能没有实现,同时还希望能够把内存的数据存入文件保存下来,并可以从文件中导入词典.此外,数据的路径是存在配 ...
- 萌新笔记——C++里创建 Trie字典树(中文词典)(三)(联想)
萌新做词典第三篇,做得不好,还请指正,谢谢大佬! 今天把词典的联想做好了,也是比较low的,还改了之前的查询.遍历等代码. Orz 一样地先放上运行结果: test1 ID : char : 件 w ...
- 萌新笔记——C++里创建 Trie字典树(中文词典)(一)(插入、遍历)
萌新做词典第一篇,做得不好,还请指正,谢谢大佬! 写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...
- Vue学习笔记-Vue.js-2.X 学习(二)===>组件化开发
===重点重点开始 ========================== (三) 组件化开发 1.创建组件构造器: Vue.extends() 2.注册组件: Vue.component() 3.使用 ...
- 萌新笔记之堆(heap)
前言(萌新感想): 以前用STL的queue啊stack啊priority_queue啊,一直很想懂原理,现在终于课上到了priority_queue,还有就是下周期中考,哈哈,所以写几篇blog总结 ...
- JVM-GC算法(二)-复制算法&&标记整理算法
这次我和各位分享GC最后两种算法,复制算法以及标记/整理算法.上一篇在讲解标记/清除算法时已经提到过,这两种算法都是在此基础上演化而来的,究竟这两种算法优化了之前标记/清除算法的哪些问题呢? 复制算法 ...
随机推荐
- Atitit onvif协议获取rtsp地址播放java语言 attilx总结
Atitit onvif协议获取rtsp地址播放java语言 attilx总结 1.1. 获取rtsp地址的算法与流程1 1.2. Onvif摄像头的发现,ws的发现机制,使用xcf类库1 2. 调用 ...
- MongoDB 安全和访问权限控制
MongoDB的访问控制能够有效保证数据库的安全,访问控制是指绑定Application监听的IP地址,设置监听端口,使用账户和密码登录 一,访问控制的参数 1,绑定IP地址 mongod 参数:-- ...
- AOP概述
了解AOP之前,先大概讲述一下SOC: Soc:Separation of concerns 关注分离点, 在不同的场景SOC有着不同的含义 Soc是一个过程:Soc是一个将功能点分解以尽量减小功能交 ...
- 从零开始编写自己的C#框架(21)——添加分类类型页面
页面权限与页面控件权限经过简单的调试后,终于启用起来了,以后大家添加新页面时,就必须按照本章介绍的方法,将你新增的页面注册到系统中,这样才能访问与进行相关操作. 下面讲讲如何创建一个分类类型的页面. ...
- Android 开发环境搭建以及工具(不断更新)
学习android需要学习的编程知识 https://wiki.cyanogenmod.org/w/Doc:_Development_Resources 从http://source.android. ...
- IIS7.5上的REST服务的Put,Delete操作发生HTTP Error 405.0 - Method Not Allowed 解决方法
WebDAV 是超文本传输协议 (HTTP) 的一组扩展,为 Internet 上计算机之间的编辑和文件管理提供了标准.利用这个协议用户可以通过Web进行远程的基本文件操作,如拷贝.移动.删除等.在I ...
- 使用STM32F4的CCM内存
使用STM32F4的CCM内存http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=604814&fromuid ...
- Linux特殊符号浅谈
Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...
- SET NOCOUNT 怎么理解
参考文章:http://www.cnblogs.com/si812cn/archive/2008/06/11/1217113.html 我简单的理解就是: 执行sql语句时 SET NOCOUNT O ...
- [下载]北京新版小学英语五年级上册mp3点读APP
义务教育教科书小学英语五年级上册点读软件.根据2014年北京教改版教材编写,发音标准.实现点读功能.点到哪里读到哪里.哪里不会点哪里!北京教育科学研究院编写,北京出版社出版.ISBN:97872001 ...