在上篇,我了解了基数的基本概念,现在进入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))的更多相关文章

  1. 萌新笔记——Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)

    最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对"基数"以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了"HyperLo ...

  2. Cardinality Estimation算法学习(二)(Linear Counting算法、最大似然估计(MLE))

    在上篇,我了解了基数的基本概念,现在进入Linear Counting算法的学习. 理解颇浅,还请大神指点! http://blog.codinglabs.org/articles/algorithm ...

  3. CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现

    CRC16算法系列文章: CRC16算法之一:CRC16-CCITT-FALSE算法的java实现 CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现 CRC16算法之三:CR ...

  4. 萌新笔记——C++里创建 Trie字典树(中文词典)(二)(插入、查找、导入、导出)

    萌新做词典第二篇,做得不好,还请指正,谢谢大佬! 做好了插入与遍历功能之后,我发现最基本的查找功能没有实现,同时还希望能够把内存的数据存入文件保存下来,并可以从文件中导入词典.此外,数据的路径是存在配 ...

  5. 萌新笔记——C++里创建 Trie字典树(中文词典)(三)(联想)

    萌新做词典第三篇,做得不好,还请指正,谢谢大佬! 今天把词典的联想做好了,也是比较low的,还改了之前的查询.遍历等代码.  Orz 一样地先放上运行结果: test1 ID : char : 件 w ...

  6. 萌新笔记——C++里创建 Trie字典树(中文词典)(一)(插入、遍历)

    萌新做词典第一篇,做得不好,还请指正,谢谢大佬! 写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...

  7. Vue学习笔记-Vue.js-2.X 学习(二)===>组件化开发

    ===重点重点开始 ========================== (三) 组件化开发 1.创建组件构造器: Vue.extends() 2.注册组件: Vue.component() 3.使用 ...

  8. 萌新笔记之堆(heap)

    前言(萌新感想): 以前用STL的queue啊stack啊priority_queue啊,一直很想懂原理,现在终于课上到了priority_queue,还有就是下周期中考,哈哈,所以写几篇blog总结 ...

  9. JVM-GC算法(二)-复制算法&&标记整理算法

    这次我和各位分享GC最后两种算法,复制算法以及标记/整理算法.上一篇在讲解标记/清除算法时已经提到过,这两种算法都是在此基础上演化而来的,究竟这两种算法优化了之前标记/清除算法的哪些问题呢? 复制算法 ...

随机推荐

  1. [Java]Java日期及时间库插件 -- Joda Time.

    来到新公司工作也有一个多月了, 陆陆续续做了一些简单的项目. 今天做一个新东西的时候发现了 Joda Time的这个东西, 因为以前用的都是JDK原生的时间处理API, 大家都知道Java原生的时间处 ...

  2. iOS-证书

    1.iOS-证书相关 2.iOS-证书申请 3.iOS-APNS证书申请与使用 4.iOS-App发布证书的申请与使用

  3. shell script 执行常用的两种方式

    2016-11-17 直接输入脚本名执行 ./script #!/bin/bash# /root/shell/001 # 2016-11-17 test for script running name ...

  4. ★Kali信息收集~ 5.The Harvester:邮箱挖掘器

    官网:http://www.edge-security.com 安装:apt-get install theHarvester 运行:终端输入 theharvester (小写) 用法+参数:(返回邮 ...

  5. 使用T-SQL找出执行时间过长的作业

        有些时候,有些作业遇到问题执行时间过长,因此我写了一个脚本可以根据历史记录,找出执行时间过长的作业,在监控中就可以及时发现这些作业并尽早解决,代码如下:   SELECT sj.name , ...

  6. OpenCASCADE Data Exchange - 3D PDF

    OpenCASCADE Data Exchange - 3D PDF eryar@163.com Abstract. Today most 3D engineering model data are ...

  7. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(23)-权限管理系统-角色组模块

    系列目录 距离上次发布22讲已经有少许日子了,真是太抱歉,最近年关项目比较急,时间太紧,没有时间发布.请大家见谅 接下来我们的目标是 角色组管理 角色组权限设置 用户管理 把角色组授权给用户 给用户分 ...

  8. UploadFile控件,提交图片后,页面预览显示刚刚提交的图片

    最近在用asp.net来写一个新闻系统后台,然后由于不用用网上的flash插件来上传图片什么的,我就用asp.net的控件来写,但是控件总归有一些用的不够灵活的地方.这次测试提出,文章在修改的时候,需 ...

  9. Vertica增加一个数据存储的目录

    Vertica增加一个数据存储的目录 操作语法为: ADD_LOCATION ( 'path' , [ 'node' , 'usage', 'location_label' ] ) 各节点添加目录,并 ...

  10. Tomcat服务器进击

    一.Tomcat服务器端口配置更改 Tomcat的所有配置都放在conf文件夹之中,server.xml文件就是配置的核心文件. 现在呢,我们需要将8080端口设置成8088端口. 启动端口默认: & ...