蒙特卡罗法

蒙特卡罗法(Monte Carlo method)也称统计模拟法、统计试验法。是把概率现象作为研究对象的数值模拟方法。蒙特卡罗是摩纳哥公国的一座城市,位于法国的东南方,世人称之为“赌博之国”,该法为表明其随机抽样的本质而命名。是使用随机数来解决很多计算问题的方法。

比如要圆周率 π ,如下图所示,在正方形内生成尽可能多的点,总的点个数为 n ,落在圆内点的个数为 k ,根据 n 和 k 我们就可以计数出 π 的大概值,当然这个值是不准确的,一般情况下当 n 越大的时候,π 的值精确度就越高。

private static double calculatePai() {
    Random random = new Random();// 生成随机数
    int n = 100000000;// 执行次数
    int k = 0;// 落在范围内的个数。
    for (int i = 0; i < n; i++) {
        double x = random.nextDouble();
        double y = random.nextDouble();
        if (x * x + y * y <= 1)
            k++;
    }
    return 4.0 * k / n;// x,y都是正的,第一象限,所以要乘以4
}

参考:

蒙特卡罗法

信奥赛编程(刷题请进)>>>

经过两年的打磨,我的新作《算法秘籍》已经出版,有需要的可以点击购买。也可以点击 内容介绍 查看详情。