随机数发生器的组合

时间:2010-10-13 05:47:15

标签: math random probability

给定两个随机整数生成器,一个生成1到7之间,另一个生成1到5之间的生成器,如何生成一个生成1到13之间的随机整数生成器?我试图以各种方式解决这个问题,但是我无法想出一个能够以相等或接近相等的概率生成1到13的数字的解决方案。

1 个答案:

答案 0 :(得分:1)

使用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];
}