(順便再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 ...