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

2021-06-26 22:29:41 字數 1278 閱讀 9621

試一下以對話的方式寫博~如果看不到人物頭像,請重新整理頁面獲取最新的css。如果有建議或意見,歡迎到我的微博上跟帖~ ,。

常規方法

echo 'rand7 = '.rand7();

function rand7()

}}

演算法的一些釋疑

晚些時候

// gen 0, 1 equal probability

int rand01()

return i % 2;}

// gen 0, 1, 2, 3, 4, 5, 6, 7 equal probability

int rand07()

// gen 1, 2, 3, 4, 5, 6, 7 equal probability

int rand7()

return i;

}

int matrix[5][5];

memset(matrix, 0, sizeof(matrix));

// set matrix with num 1-7, each num has the same count.

for (int i = 1; i <= 7; ++i)}

int rand7()

while (i == 0);

return i;

}

通過這個面試題學到了等概率問題的各種解法,可以從把數從二進位制角度看,可以用公式拼接出更大的等概率值域空間,也可以直接把概率問題轉化到矩陣中解決。

rand5() 它能夠等概率生成 1-5 之間的整數。所謂等概率就是1,2,3,4,5 生產的概率均為 0.2 。現在利用rand5(), 構造乙個能夠等概率生成 1- 7 的方法。 這裡有兩個特別重要的點,一是 如果 rand5() + rand5(), 我們能夠產生乙個均勻分布的 1 - 10 嗎? 答案是否定的。比如對於 6來講(4+2, 2+4, 3+3),它被生成的生成的概率比1 (1+0,0+1)要大。

第二個點就是我們不可能用rand5()直接產生 1- 7 的數,不管你用加減乘除都不行。所以,我們要構造乙個更大的範圍,使得範圍裡每乙個值被生成的概率是一樣的,而且這個範圍是7的倍數。

先產生乙個均勻分布的 0, 5, 10, 15, 20的數,再產生乙個均勻分布的 0, 1, 2, 3, 4 的數。相加以後,會產生乙個 0到24的數,而且每個數(除0外)生成的概率是一樣的。我們只取 1 - 21 這一段,和7 取餘以後+1就能得到完全均勻分布的1-7的隨機數了。

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

給定乙個函式rand5 該函式可以隨機生成1 5的整數,且生成概率一樣。現要求使用該函式建構函式rand7 使函式rand7 可以隨機等概率的生成1 7的整數。當看到這道題的時候,第乙個想法就是 利用rand5 rand5 3 來解決 但是這樣得出的結果不是題目所要求的等概率的,這種情況下rand5...

由隨機數rand5實現隨機數rand7

rand7表示生成隨機數1,2,3,4,5,6,7 要通過rand5構造rand7現在可能沒有什麼思路,我們先試著用rand7生成rand5 rand7生成rand5很簡單,把6和7排除掉就是rand5了,也就是當隨機到大於5的時候,就再隨機一次,直到小於等於5 寫起來很容易 public stat...

rand 及如何優秀的編輯隨機函式

include include using namespace std intmain 你會發現每一次輸出的數都是不一樣的,是不是對它有了崇拜呢?別急,先執行10遍下面的程式。include using namespace std intmain 你會驚訝的發現,每一次輸出的數是一模一樣的,這時候你...