試一下以對話的方式寫博~如果看不到人物頭像,請重新整理頁面獲取最新的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 你會驚訝的發現,每一次輸出的數是一模一樣的,這時候你...