码迷,mamicode.com
首页 > 其他好文 > 详细

Algs4-1.1.27二项分布

时间:2018-10-25 12:13:12      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:none   dns   mil   数学   width   top   1.2   []   统计   

 1.1.27二项分布。估计用以下代码计算binomial(100,50,0.25)将会产生的递归调用次数:
public static double binomial(int N,int k,double p)
{
    if (N==0 && k==0) return 1.0;
    if (N<0 || k<0) return 0.0;
    return (1.0-p)*binomial(N-1,k,p)+p*binomial(N-1,k-1,p);
}
将已经计算过的值保存在数组中并给出一个更好的实现。
答:
1)递归调用次数公式为:
技术分享图片
本题的调用次数为将N=100,k=50代入上式。

解题过程如下,解题过程并非如下列描述如此顺利。

依据上面代码得到递归式:T(N,k)=T(N -1,k)+T(N -1,k-1)

依此递归式可以看出是一棵二叉树,求递归调用的次数等同于求这棵二叉树的节点个数。

通过代码可以看出树的最大深度为N +1,对于一棵高度为N +1的满二叉树,其节点总个数为2 N +1+1-1=2 N +2-1,所以得递归调用的次数的上界为2 N+2-1

     由于k的取值范围为0<=k<=N,不同的k值对这棵二叉树的节点数也有影响,影响到底有多大?先按递归式画出下图满二叉树: 
技术分享图片

观察上图,将节点中第二个参数值为k、k-1、k-2、k-3…的个数统计,得出下面的表格数据:

层次

k

k-1

k-2

k-3

k-4

0

1

       

1

1

1

     

2

1

2

1

   

3

1

3

3

1

 

4

1

4

6

4

1

 

观察以上表格发现除第一列外,每个单元格中的值=其上一行同列单元格的值+其上一行同列的左边列的值,而这一特性与帕斯卡三角形具有相同性质,各单元格的值也符合二项式公式C(N,k)

上表中K-X=-1开始至K-N-1的列中的所有单元格值的和即为不存在的节点。所以总的节点个数为满二叉树的节点个数减去上述个数,得以下公式:

  技术分享图片
2)将已计算的值存数组的实现方式:
public class Test
{
    public static void main(String[] args)
    {
         int N=Integer.parseInt(args[0]);
         int k=Integer.parseInt(args[1]);
         double p=Double.parseDouble(args[2]);
         double[][] b=new double[N+1][k+1];
         //
         b[0][0]=1;
         //
         for(int i=1;i<N+1;i++)
             b[i][0]=b[i-1][0]*(1-p);
         //
         for(int i=1;i<N+1;i++)
             for(int j=1;j<i+1 &&  j<k+1;j++)
                 b[i][j]=b[i-1][j]*(1-p)+b[i-1][j-1]*p;
         StdOut.println(b[N][k]);
    }
}

参考资料:
《离散数学及其应用》原书第7版中文版ISBN:9787111453826
《组合数学》原书第二版中文版ISBN:9787111377870

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

Algs4-1.1.27二项分布

标签:none   dns   mil   数学   width   top   1.2   []   统计   

原文地址:https://www.cnblogs.com/longjin2018/p/9848658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!