以下代码能够计算每种两个骰子之和的准确概率分布:
int SIDES = 6;
double[] dist = new double[2 * SIDES + 1];
for (int i = 1; i <= SIDES; i++)
for (int j = 1; j <= SIDES; j++)
dist[i + j] += 1.0;
for (int k = 2; k <= 2 * SIDES; k++)
dist[k] /= 36.0;
dist[i]的值就是两个骰子之和为i的概率。
用实验模拟N次掷骰子,并在计算两个1到6之间的随机整数之和时记录每个值的出现频率以验证它们的概率。N要多大才能保证你的经验数据和准确数据的吻合程度达到小数点后三位?
实验代码:
import edu.princeton.cs.algs4.*;
public class fly {
public long test() {
// 记录试验次数
long N = 0;
// 计算每种两个骰子之和的准确概率分布
int SIDES = 6;
double[] dist = new double[2 * SIDES + 1];
for (int i = 1; i <= SIDES; i++)
for (int j = 1; j <= SIDES; j++)
dist[i + j] += 1.0;
for