Как уже отмечали другие, не существует решения, которое бы работало 100% времени, и вы должны использовать выборку отклонения.
В общем, я второй ответ Клетуса, но используя его алгоритм, вы получите один результат из двух кубиков с вероятностью 5/6, что означает, что ожидаемое «количество результатов на кубик» составляет 5/12 ~ = 0,417. Умножая последнее на энтропию одного из ваших случайных результатов,
что
-(0.1*log2(0.1) + 0.2*log2(0.2) + 0.3*log2(0.3) + 0.4*log2(0.4)) ~= 1.846
получаем 0,770. Другими словами, мы используем в среднем 0,770 бит информации от каждого кристалла. Мы можем сделать лучше, чем это.
Например, бросая 9 кубиков, вы получаете 6 ^ 9 = 10077696 возможных результатов. Следуя Cletus, сформируйте число от 0 до 10077695 и сохраняйте его, только если оно находится в диапазоне от 0 до 9999999 (это происходит с вероятностью ~ 0,992). В этом случае у вас есть 7 случайных десятичных цифр с равномерным распределением, и из каждой из них вы можете извлечь случайное число, как в вашей задаче:
0,1,2,3 --> 1
4,5,6 --> 2
7,8 --> 3
9 --> 4
Таким образом, у нас есть 7 случайных результатов на каждые 9 кубиков с вероятностью 0,992 или среднее «количество результатов на кубик» 0,992 * 7/9 ~ = 0,772. Умножив это на энтропию результата, мы получим 1,846 * 0,772 ~ = 1,425. Таким образом, таким образом мы используем в среднем 1,425 битов от каждого кристалла.
Вероятно, мы можем лучше бросать больше кубиков или использовать другую технику. Конечно, верхняя граница - это энтропия матрицы, которая составляет log2 (6) ~ = 2,585 бит.