給定乙個函式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...