Комбинация генераторов случайных чисел - PullRequest
1 голос
/ 13 октября 2010

Учитывая два генератора случайных целых чисел, один из которых генерирует от 1 до 7, а другой - от 1 до 5, как создать генератор случайных целых чисел, который генерирует от 1 до 13?Я пытался решить этот вопрос различными способами, но мне не удалось найти решение, которое генерирует числа от 1 до 13 с равной или почти равной вероятностью.

1 Ответ

1 голос
/ 13 октября 2010

Используя два верхних ответа для Расширьте случайный диапазон от 1–5 до 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];
}
...