概率算法也叫隨機化算法。分治算法、貪心算法、動態規劃算法、回溯法、分治界限算法這些算法的每一計算步驟都是確定的,概率算法則允許算法在執行過程中隨機地選擇下一個計算步驟。在很多情況下,算法在執行過程中面臨選擇時,隨機性選擇比最優選擇省時,因此概率算法可以在很大程度上降低算法的復雜度。
大致可分4類:
1. 數值隨機化算法
1. 蒙特卡羅(Monte Carlo)算法
1. 拉斯維加斯(Las Vegas)算法
1. 舍伍德(Sherwood)算法
各算法特點對比:
###1.數值隨機化算法
> 用于數值計算,求得的往往是近似解,比如通過概率投點的思想計算圓周率、計算定積分.

如圖,向邊長為1的正方形內隨機投n個點,記落入圓內的點的個數為k,根據幾何概型,k/n近似等于圓的面積除以正方形對面積。只計算第一象限,1/4*pi*1*1除以1*1近似等于k/n,pi=4*k/n
程序驗證:
~~~
#include <iostream>
#include <ctime>
#include <math.h>
using namespace std;
int main(){
srand((unsigned)time(0));
double x,y;
int k=0,n=1000000;
for(int i=0;i<n;i++){
x=rand()/(double)(RAND_MAX); //隨機數x
y=rand()/(double)(RAND_MAX); //隨機數y x、y在0到1之間
if((pow(x,2)+pow(y,2))<=1) k++;
}
cout<<(double)4*k/n<<endl;
}
~~~
n等于100:

n等于1000:

n等于100000000

可以看到,n約大pi的值越精確.當n等于1億的時候,可以穩定到3.141
可以用相同的方法計算定積分.
###2.蒙特卡羅(Monte Carlo)算法
> 能求得問題的一個解,但是這個解未必正確
###3.拉斯維加斯(Las Vegas)算法
> 要么找到的解是正確的,要么找不到解
###4.舍伍德(Sherwood)算法
> 一定能找到解,而且是正確解
后面三種算法的實例等到有時間再補充。