本章内容来自《妙趣横生的算法》 一书中。

在解决实际问题时,有时会用到所谓的概率算法。概率算法允许在执行过程中随机地选择下一步的计算步骤,因此使用概率算法有时会大大地提高算法的效率,但有时也可能得不到问题的全部答案。

概率算法大致分为四类:数值概率算法,蒙特卡洛(Monte Carlo)算法,拉斯维加斯(Las Vegas)算法,和舍伍德(Sherwood)算法。这里只介绍最为基础的数值概率算法。

数值概率算法常应用于解决数值计算的问题。应用数值概率算法往往只能得到问题的近似解,并且该近似解的精度一般随着计算时间的增加而不断提高。因为在一些数值问题中,不可能也没有必要计算出问题的精确解(例如:计算无理数π的取值等),因此,在解决一些数值计算的问题时,数值概率算法常能派上用场。

例子:设f(x)=1-x2,计算定积分:的值

分析:要计算的定积分值的几何含义就是图中阴影部分的面积。可以试想,如果随机地向图中虚线与x,y坐标轴所围成的正方形中投点,那么根据几何概率的知识可知,随机点落入阴影区域的概率即为阴影部分的面积与虚线与x,y坐标轴所围成的正方形的面积之比。计算定积分。

#include "stdio.h" #include "math.h" #include "stdlib.h" #include "time.h" double Darts(int n) { double x,y; time_t t; int i,count = 0; srand((unsigned)time(&t)); for(i=0;i<n;i ) { x = rand()0/100.0; y = rand()0/100.0; if(y<=1 - pow(x,2)) count ; } return (double)count/(double)n; /*返回落入阴影区域的点数与总点数n的比值*/ } main() { int n; printf("Please input the accuracy\n") ; /*输入精度,即投点数*/ scanf("%d",&n); printf("The result is about\n"); /*输出计算结果*/ printf("%f\n",Darts(n)); getche(); }

运行结果:

数学 定积分(计算定积分)(1)

,