线性同余法[纯理论]
現(xiàn)在的隨機(jī)函數(shù)發(fā)生器大都采用的是線性同余法。
?
同余的概念是這樣描述的:
設(shè)m是一個(gè)給定的正整數(shù),如果兩個(gè)整數(shù)a,b用m除,所得的余數(shù)相同,則稱a,b對(duì)模m同余。
所謂線性同余法(又叫混合同余法),就是這樣的一個(gè)公式:X[i+1]=(A*X[i]+C) mod M;
經(jīng)前人研究表明,在M=2^q的條件下,參數(shù)A,C,X[0]按如下選取,周期較大,概率統(tǒng)計(jì)特性好:
A=2^b+1=2^(log2(M)/2)+1=2^log2(sqrt(M))+1=sqrt(M)+1;b取q/2 附近的數(shù)
C=(1/2+sqrt(3))*M
X[0]為任意非負(fù)數(shù)
M , 模數(shù)???????? 0 < M
A, 乘數(shù)???????? 0 <= A<M
C, 增量???????? 0 <=C<M
Xi,開始值??????? 0<=Xi<M
它的一個(gè)致命的弱點(diǎn),那就是隨機(jī)數(shù)的生成在某一周期內(nèi)成線性增長(zhǎng)的趨勢(shì),顯然,在大多數(shù)場(chǎng)合,這種極富“規(guī)律”型的隨機(jī)數(shù)是不應(yīng)當(dāng)使用的。
?
同余序列總是進(jìn)入一個(gè)循環(huán),這是一個(gè)事實(shí),它最終必定在N個(gè)數(shù)之間無(wú)休止的重復(fù)循環(huán)。
使用該方法產(chǎn)生的偽隨機(jī)數(shù)能不能近似真正的隨機(jī)效果,跟四個(gè)整數(shù)的設(shè)置相關(guān):
1.???????? 序列的開始值,一般取正整數(shù)。
2.???????? m:一個(gè)同余序列的周期不可能多于m個(gè)元素,所以,為了達(dá)到預(yù)期的隨機(jī)效果,一般我們希望這個(gè)值稍稍大一點(diǎn)。在大多數(shù)情況下,當(dāng)m = 2e(e表示計(jì)算機(jī)的字大小)時(shí),在計(jì)算機(jī)中得到的隨機(jī)效果就比較令人滿意了。而且這樣對(duì)于隨機(jī)數(shù)生成速度也是比較合理的。
3.???????? a:當(dāng)a=1的時(shí)候,Xn=(X0+nc)mod m ,它不具有隨機(jī)序列的特性;而當(dāng)a=0的時(shí)候甚至更糟糕。因此,為實(shí)用起見,選擇2 <= a<m比較合理。
4.???????? c:當(dāng)c=0時(shí),數(shù)的生成過(guò)程比c!=0的時(shí)候要稍微快些,它的限制縮短了這個(gè)序列的周期長(zhǎng)度,但是也仍然有可能得到一個(gè)相當(dāng)長(zhǎng)的周期。當(dāng)c=0時(shí)被稱為乘同余法,c!=0稱為混合同余法。為了一般性,我建議選擇采用混合同余法。
由m,a,c和X0所定義的線形同余序列得到最大的周期長(zhǎng)度m的條件如下:
當(dāng)且僅當(dāng)
(1)c與m互素。
(2)對(duì)于整除m的每個(gè)素?cái)?shù)p,2^b=a-1是p的倍數(shù)。
(3)如果m是4的倍數(shù),則b也是4的倍數(shù)。
就像開始提到的,偽隨機(jī)數(shù)的產(chǎn)生都是由一個(gè)起始種子數(shù)開始的,上面描述的就是由一個(gè)種子數(shù)下能夠產(chǎn)生的隨機(jī)數(shù)的序列。這個(gè)序列的周期性是必然的,當(dāng)這個(gè)周期能夠滿足預(yù)期的效果的時(shí)候,就是我們看到的滿意的隨機(jī)效果。
在確定初始種子數(shù)的時(shí)候,可以有多種形式,例如將某時(shí)刻的時(shí)鐘數(shù)據(jù)做種子,通過(guò)時(shí)間的不停變化,進(jìn)行隨機(jī)數(shù)的求取來(lái)達(dá)到隨機(jī)效果。這些都是方法問題了,不在算法討論范疇。
總結(jié)
以上是生活随笔為你收集整理的线性同余法[纯理论]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python教程ppt第五章_Pytho
- 下一篇: 车辆属性识别、车型识别