數值概率演算法(轉 用來說明演算法導論題目!!!)

2022-02-18 01:07:32 字數 2563 閱讀 5386

(順便再ps一下,小傑也是我論壇的c/c++問題求助板塊的版主,c/c++小牛)

這一章我就把書中的乙個例子舉出來了,感覺雖然很簡單,但是很有意思。

用隨機投點法計算pi值

設有一半徑為r的圓及其外切四邊形。向該正方形隨機地投擲n個點。設落入圓內的點數為k。由於所投入的點在正方形上均勻分布,因而所投入的點落入圓內的概率為(pi*r*r)/(4*r*r)= pi/4 。所以當n足夠大時,k與n之比就逼近這一概率。從而,pi 約等於 (4*k)/n.

如下圖:

因為**裡用到了上一章《概率演算法(1) — 隨機數》裡的randomnumber類,所以大家可以先把前一章看看。

我把這個偽隨機類再貼一遍:

const unsigned long maxshort = 65535l;

const unsigned long multiplier = 1194211693l;

const unsigned long adder = 12345l;

class randomnumber;

// 產生種子

randomnumber::randomnumber(unsigned long s)

// 產生0 ~ n-1 之間的隨機整數

unsigned short randomnumber::random(unsigned long n)

// 產生[0, 1)之間的隨機實數

double randomnumber::frandom()

主檔案main:

/** author: tanky woo

* blog:   www.wutianqi.com

* date:   2010.12.8

* 用隨機投點法計算pi值

* **來至王曉東《計算機演算法設計與分析》

*/#include "randomnumber.h"

#include 

#include 

#include 

using namespace std;

double darts(long n)

return 4 * k / double(n);

}int main()

通過**可以看出,隨機投點越多,則越接近與3.1415926…

這個和拋硬幣時求硬幣正反面概率類似,實驗次數越多,則越接近於理論值。

下一章是《隨機化演算法(3) — 舍伍德(sherwood)演算法》

tanky woo 標籤: 數值隨機演算法,隨機投點法,求pi值

(順便再ps一下,小傑也是我論壇的c/c++問題求助板塊的版主,c/c++小牛)

這一章我就把書中的乙個例子舉出來了,感覺雖然很簡單,但是很有意思。

用隨機投點法計算pi值

設有一半徑為r的圓及其外切四邊形。向該正方形隨機地投擲n個點。設落入圓內的點數為k。由於所投入的點在正方形上均勻分布,因而所投入的點落入圓內的概率為(pi*r*r)/(4*r*r)= pi/4 。所以當n足夠大時,k與n之比就逼近這一概率。從而,pi 約等於 (4*k)/n.

如下圖:

因為**裡用到了上一章《概率演算法(1) — 隨機數》裡的randomnumber類,所以大家可以先把前一章看看。

我把這個偽隨機類再貼一遍:

const unsigned long maxshort = 65535l;

const unsigned long multiplier = 1194211693l;

const unsigned long adder = 12345l;

class randomnumber;

// 產生種子

randomnumber::randomnumber(unsigned long s)

// 產生0 ~ n-1 之間的隨機整數

unsigned short randomnumber::random(unsigned long n)

// 產生[0, 1)之間的隨機實數

double randomnumber::frandom()

主檔案main:

/** author: tanky woo

* blog:   www.wutianqi.com

* date:   2010.12.8

* 用隨機投點法計算pi值

* **來至王曉東《計算機演算法設計與分析》

*/#include "randomnumber.h"

#include 

#include 

#include 

using namespace std;

double darts(long n)

return 4 * k / double(n);

}int main()

通過**可以看出,隨機投點越多,則越接近與3.1415926…

這個和拋硬幣時求硬幣正反面概率類似,實驗次數越多,則越接近於理論值。

下一章是《隨機化演算法(3) — 舍伍德(sherwood)演算法》

tanky woo 標籤: 數值隨機演算法,隨機投點法,求pi值

舍伍德演算法(轉 用來說明演算法導論題目!!!)

已出 1.隨機化演算法 1 隨機數 2.隨機化演算法 2 數值概率演算法 正文 這一章怎麼說呢,我個人感覺不好理解,在網上查了一些資料,沒發現有具體對舍伍德演算法的介紹。有時間我把那本書上講舍伍德的一段給拍下來放到文章裡 書上對舍伍德講的比較詳細,但是不太好理解,一定要多看幾遍。我這裡只說下他的基本...

蒙特卡洛演算法(轉 用來說明演算法導論題目!!!)

本文通過五個例子,介紹蒙特卡羅方法 monte carlo method 蒙特卡羅方法是一種計算方法。原理是通過大量隨機樣本,去了解乙個系統,進而得到所要計算的值。它非常強大和靈活,又相當簡單易懂,很容易實現。對於許多問題來說,它往往是最簡單的計算方法,有時甚至是唯一可行的方法。它誕生於上個世紀40...

迴圈賽日程表(用來說明演算法導論上的題目!!)

設有n 2k個選手參加比賽,要求設計乙個滿足一下要求的比賽日程表 1 每個選手必須與其他的n 1個選手個比賽一次 2 每個選手每天只能賽一次 按此要求可以把比賽日程表設計成乙個n行n 1列的二維表,其中第i行第j列表示第i個選手在 第j天比賽的選手。分治策略 1 include2 include3 ...