在上篇,我了解了基数的基本概念,现在进入Linear Counting算法的学习。 理解颇浅,还请大神指点!

  http://blog.codinglabs.org/articles/algorithms-for-cardinality-estimation-part-ii.html

  它的基本处理方法和上篇中用bitmap统计的方法类似,但是最后要用到一个公式:

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

  说明:m为bitmap总位数,u为0的个数,最后的结果为n的一个估计,且为最大似然估计(MLE)。

  那么问题来了,最大似然估计是什么东东?好像在学概率论的时候听说过,于是又去搜索了一下MLE的信息。

 

MLE:(此处不使用概率论中的各种符号及表示方法,按我自己的理解写)

  以下内容参考链接:http://blog.csdn.net/yanqingan/article/details/6125812

  假设进行一个实验,实验次数定为10次,每次实验成功率为0.2,那么不成功的概率为0.8,用n来表示成功的次数。

  事件之间是相互独立的,于是可以得到成功次数的概率:

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

 

成功次数 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

 

 

   以上数据由下述程序计算:

 1 #include <stdio.h>
 2 #define N 10
 3 #define G 0.2
 4 
 5 int factorial(int n)
 6 {
 7     int i;
 8     int ret = 1;
 9     for(i = 1; i <= n; ++i)
10     {
11         ret *= i;
12     }
13     return ret;
14 }
15 
16 double exponent(double m, int n)
17 {
18     int i;
19     double ret = 1;
20     for(i = 0; i < n; ++i)
21     {
22         ret *= m;
23     }
24     return ret;
25 }
26 
27 double fun(int n)
28 {
29     return ((double)factorial(N) / factorial(n) / factorial(N - n) * exponent(G, n) * exponent(1 - G, N - n));
30 }
31 
32 int main()
33 {
34     int i;
35     for(i = 0; i <= N; ++i)
36     {
37         printf("%f\t", fun(i));
38     }
39     printf("\n");
40 }
View Code

相关文章:

  • 2022-12-23
  • 2021-12-23
  • 2022-12-23
  • 2021-06-30
  • 2021-04-07
  • 2021-06-29
  • 2022-03-10
  • 2021-06-13
猜你喜欢
  • 2021-05-01
  • 2021-12-29
  • 2022-12-23
  • 2021-08-29
  • 2021-04-07
  • 2021-07-01
相关资源
相似解决方案