1. 程式人生 > >二項分佈,binomial(n,k,p)

二項分佈,binomial(n,k,p)

一、二項分佈,遞迴實現

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