二项分布,binomial(n,k,p)

来源:互联网 发布:aspera上传数据至sra 编辑:程序博客网 时间:2024/04/28 09:58

一、二项分布,递归实现

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);}

解释:


缺点:递归调用,没有保存已经计算过的值,导致很费时间


二、二项分布,非递归实现。将已经计算过的值保存在数组中并给出一个更好的实现

public static double bin(int N, int k, double p){double [][] b = new double[N+1][k+1];b[0][0] = 1;for(int i=1; i<=N; i++)b[i][0] = (1.0 - p) * b[i-1][0];for(int i=1; i<=N; i++){for(int j=1; j<=k; j++){b[i][j] = (1.0 - p) * b[i-1][j] + p * b[i-1][j-1];}}return b[N][k];}