1
給定兩個隨機整數發生器,一個產生1到7,另一個產生1到5,你如何產生一個隨機的整數發生器,產生1到13之間?我嘗試過以各種方式解決這個問題,但我一直沒有能夠提出一個解決方案,以相等或幾乎相等的概率生成1到13的數字。隨機數發生器的組合
給定兩個隨機整數發生器,一個產生1到7,另一個產生1到5,你如何產生一個隨機的整數發生器,產生1到13之間?我嘗試過以各種方式解決這個問題,但我一直沒有能夠提出一個解決方案,以相等或幾乎相等的概率生成1到13的數字。隨機數發生器的組合
使用前兩個答案Expand a random range from 1–5 to 1–7,我想出了以下內容。有可能是一個更有效的方法來做到這一點(也許使用1-5生成器?),但這似乎工作。
優化壓實
var j;
do {
j = 7 * (rand7() - 1) + rand7(); // uniformly random between 1 and 49
} while (j > 39);
// j is now uniformly random between 1 and 39 (an even multiple of 13)
j = j % 13 + 1;
優化可理解
var v = [
[1, 2, 3, 4, 5, 6, 7],
[8, 9, 10, 11, 12, 13, 1],
[2, 3, 4, 5, 6, 7, 8],
[9, 10, 11, 12, 13, 1, 2],
[3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0]
];
var j = 0;
while (j == 0) {
j = v[rand7() - 1][rand7() - 1];
}
可愛的解決方案,非常感謝。 :) – Anand 2010-10-13 08:00:26
嘗試:http://stackoverflow.com/questions/1268025/using-one-probability-set-to -generate-another – Jander 2010-10-13 06:32:40