隨機(jī)化算法——隨機(jī)數(shù)
概率算法的一個基本特征是對所求解問題的同一實例用同一概率算法求解兩次可能得到完全不同的效果。這兩次求解問題所需的時間甚至所得到的結(jié)果可能會有相當(dāng)大的差別。一般情況下,可將概率算法大致分為四類:數(shù)值概率算法,蒙特卡羅(Monte Carlo)算法,拉斯維加斯(Las Vegas)算法和舍伍德(Sherwood)算法。
隨機(jī)數(shù)在概率算法設(shè)計中扮演著十分重要的角色。在現(xiàn)實計算機(jī)上無法產(chǎn)生真正的隨機(jī)數(shù),因此在概率算法中使用的隨機(jī)數(shù)都是一定程度上隨機(jī)的,即偽隨機(jī)數(shù)。
產(chǎn)生隨機(jī)數(shù)最常用的方法是線性同余法。由線性同余法產(chǎn)生的隨機(jī)序列a1,a2,…,an滿足
1.a0=d
2.an=(b*an-1+c)mod m (n=1,2…….)
其中,b>0, c>=0, d>=m。d稱為該隨機(jī)序列的種子。
一般情況下,取gcd(m, b)=1,因此可取b為一素數(shù)。
這是一個隨機(jī)數(shù)類:
代碼
const unsigned long maxshort = 65535L;
const unsigned long multiplier = 1194211693L;
const unsigned long adder = 12345L;
class RandomNumber{
private:
// 當(dāng)前種子
unsigned long randSeed;
public:
// 構(gòu)造函數(shù),默認(rèn)值0表示由系統(tǒng)自動產(chǎn)生種子
RandomNumber(unsigned long s = 0);
// 產(chǎn)生0 ~ n-1之間的隨機(jī)整數(shù)
unsigned short Random(unsigned long n);
// 產(chǎn)生[0, 1) 之間的隨機(jī)實數(shù)
double fRandom();
};
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |