Прокатка шестигранной матрицы 5 раз дает 6 ^ 5 = 7776 возможных последовательностей, причем все они равновероятны. В идеале вам нужно разделить эти последовательности на 100 групп равного размера, и у вас будет свой номер [1 - 100], но, поскольку 7776 не делится на 100 без остатка, это невозможно. Лучшее, что вы можете сделать, чтобы минимизировать смещение, - это 76 групп, сопоставленных по 78 последовательностей каждая, и 24 группы, сопоставленные с 77 последовательностями каждая. Закодируйте (упорядоченные) броски кубиков как число n с основанием 6 и верните 1 + (n% 100).
Мало того, что нет способа удалить смещение с помощью 5 бросков кубиков, нет такого количества бросков кубиков, которое полностью устранит смещение. Не существует значения k, для которого 6 ^ k делится на 100 без остатка (рассмотрим факторизации на простые множители). Это не означает, что нет способа устранить смещение, это просто означает, что вы не можете удалить смещение, используя процедуру, которая гарантированно завершится после любого определенного количества бросков кубиков. Но вы могли бы, например, сделать 3 броска костей, создавая 6 ^ 3 = 216 последовательностей, закодированных как число n с основанием 6, и вернуть 1 + (n% 100), если n ‹200. Уловка в том, что если n> = 200, вы должны повторите процедуру, и продолжайте повторять, пока не получите n <200. Таким образом, нет предвзятости, но также нет ограничений на то, как долго вы можете застрять в цикле. Но поскольку вероятность повторения составляет всего 16/216 каждый раз, с практической точки зрения это не проблема.
person
JSLigon
schedule
20.03.2015
Random
, поддерживайте единственный экземпляр для каждого вызова метода. Хотя вы все еще можете потерять числа, диапазон будет гораздо более случайным. - person MadProgrammer   schedule 04.09.2014