隨機機率的使用小竅門

2021-04-07 08:24:35 字數 1569 閱讀 5007

(本文為原創,轉貼請註明出處:http://blog.csdn.net/kyosukeno1)

在自然界中,雖然存在著一定的客觀規律,但並沒有絕對的可能性和不可能性。因此,使用隨機概率去描述事物的發生與消亡,最能貼切反應事物原有特徵。

隨機函式最一般性的運用,莫過於使用

%來簡單的限制隨機數值的大小――相信經常使用

random

函式的讀者,對

random() % random_range

的隨機機率產生已經十分的熟悉了,然而,在實際的應用中,隨機機率有著更複雜的應用。本文將介紹

2種隨機機率使用方面的小竅門,以之拋磚引玉,希望能引起讀者們的一點討論。

小竅門一:累計型隨機機率的快速查詢。 假設

a的機率是25,

b的機率是35,

c的機率是

20,那麼怎麼才能用最簡單的方法去隨機的、按照設定的概率去得到隨機數呢?以下是以

c++的實現**:

int i; //

用做迴圈的變數(廢話

-_-b

)int nprob = ; //

設定各元素的概率

int nsum = 0; //

儲存概率總數的變數

for( i=0; i

nsum += nprob[i]; //

計算概率的總數

int nrand = rand() % nsum; //

取乙個在概率的總數範圍內的隨機數

for( i=0; i

if( nrand < nprob[i] ) else

}這種演算法的步驟很簡單:

首先把所有概率的總數統計出來,然後以此作為隨機數

nrand

的取值範圍。

依次把

nrand

和當前元素的概率比較,如果

nrand

小於這個概率,則命中這個元素,退出查詢。 如果

nrand

大於當前元素的概率,就用

nrand

減去該元素的概率,然後回到步驟

2,直至所有元素查詢完畢。

這種演算法的優點是計算量小,而且容易在不同的程式語言中使用。

小竅門二:機率可以表示為分母為

2的次方數時的快速查詢。

在某些情況下,當前需要計算的隨機機率可以表示為乙個分母為

2的此方數的分數:例如

1/4,

3/4,

1/16

,15/16

等等,這時只要以以下的公式,就能快速的計算:

// 例1

// 元素

a的概率是

1/4// 元素b

的概率是

3/4int nrand = rand() & 0x3;

if( nrand == 0 )

else

// 例

2// 元素a

的概率是

1/16

// 元素

b的概率是

15/16

int nrand = rand() & 0xf;

if( nrand == 0 )

else

vim使用之小竅門

一 vim如何把程式執行結果複製到程式檔案中 1 開啟兩個終端,乙個用於編寫程式,另乙個用於編譯和執行程式。2 執行完程式後,選取程式執行的結果,在另個終端按shift insert將程式執行結果複製到程式中。如下 二 vi vim 如何搜尋關鍵字或消除搜尋後的關鍵字高亮 在vi裡面如果要搜尋某個關...

google搜尋的使用小竅門

1 site的使用 site 網域名稱 搜尋關鍵字或者搜尋關鍵字 site 網域名稱 google中site 的使用方法總結 使用 site 搜尋運算子查詢違規內容 2 限定搜尋時間 before 2019 04 after now before 2019 04 after 2021 01 befo...

求職的小竅門

大學畢業季,回味之前幾年時光匆匆流逝,自己宛如一張白紙。就業 擇業 失業,接踵而來。就業 如汪洋大海,我猶如未起航的小船,停靠在溫暖的港灣。擇業 如汪洋大海中漂泊小船的風帆,迎風飄揚。失業 波濤洶湧的浪花拍打在猶弱的小船上,慢慢的吞噬。簡歷 面試 入職三部曲 簡歷 一般前程無憂 智聯招聘 如何吸引h...