演算法 根據Rand5 函式構造生成Rand7

2021-10-03 03:39:16 字數 788 閱讀 5668

給定乙個函式rand5(),該函式可以隨機生成1-5的整數,且生成概率一樣。現要求使用該函式建構函式rand7(),使函式rand7()可以隨機等概率的生成1-7的整數。

當看到這道題的時候,第乙個想法就是:利用rand5() + rand5()%3 來解決;但是這樣得出的結果不是題目所要求的等概率的,這種情況下rand5()%3產生結果為0的概率為1/5,而產生1或者2的概率為2/5,因此最終產生6和7的概率將大於產生1-5的概率;

正確的解法應該是:構造大的整數區間,限制整數區間,最後對映整數區間.即:使用rand5()生成1-25這個範圍,捨棄掉22-25,只使用1-21範圍來對映到1-7這個範圍。

比如:1,2,3 —> 1;

4,5,6 —> 2;

7,8,9 —> 3;

…**:

int

rand5()

intrand7()

}

同樣的,我們也可以使用rand5()來構造出rand3():

int

rand3()

}

還有一種方法:

利用預置陣列

該方法簡單,易理解,但是不具擴充套件性,需要額外儲存空間.

int

rand7()

,,,,

};int ret =0;

while

(ret ==0)

return ret;

}

演算法 rand5 產生rand7

一點心青 前兩天,睡覺前,偶爾翻起演算法導論,看到隨機函式這一塊內容,裡面有乙個練習題 5.1 2 描述random a,b 過程的一種實現,它只呼叫random 0,1 作為a和b的函式,你的程式的期望執行時間是多少?注 random a,b 為產生a,a 1,a 2,b的函式發生器,且產生各整數...

演算法題 rand5 產生rand7

前兩天,睡覺前,偶爾翻起演算法導論,看到隨機函式這一塊內容,裡面有乙個練習題 5.1 2 描述random a,b 過程的一種實現,它只呼叫random 0,1 作為a和b的函式,你的程式的期望執行時間是多少?注 random a,b 為產生a,a 1,a 2,b的函式發生器,且產生各整數的概率相等...

如何用隨機函式rand5來構造隨機函式rand7

試一下以對話的方式寫博 如果看不到人物頭像,請重新整理頁面獲取最新的css。如果有建議或意見,歡迎到我的微博上跟帖 常規方法 echo rand7 rand7 function rand7 演算法的一些釋疑 晚些時候 gen 0,1 equal probability int rand01 retu...