Я знаю, что этому посту уже почти 4 года, но я хобби-криптоаналитик и изучаю шифры игральных карт . В результате я возвращался к этому посту снова и снова, чтобы объяснить перетасовку колоды как источник энтропии для случайного нажатия на колоду. Наконец, я решил проверить ответ с помощью stachyra, перетасовывая колоду вручную и оценивая энтропию колоды после каждого перемешивания.
TL; DR, чтобы максимизировать энтропию колоды:
- Для только перетасовки рифлей вам нужно 11-12 перетасовок.
- Для того, чтобы сначала разрезать колоду, а затем перетасовать, вам нужно всего лишь 6-7 перемешиваний.
Во-первых, все, что Стахира упомянул для расчета энтропии Шеннона, верно. Это можно свести к следующему:
- Численно назначьте уникальное значение каждой из 52 карт в колоде.
- Перемешайте колоду.
- Для n = 0 до n = 51 запишите каждое значение (n - (n + 1) mod 52) mod 52
- Подсчитайте количество вхождений 0, 1, 2, ..., 49, 50, 51
- Нормализуйте эти записи, разделив каждую на 52
- Для i = 1 до i = 52 рассчитайте -p_i * log (p_i) / log (2)
- Суммируйте значения
Где Стахира делает одно тонкое предположение, это то, что реализация человеческой случайности в компьютерной программе будет сопровождаться некоторым багажом. С бумажными игральными картами, когда они привыкнут, масло из ваших рук переходит на карты. В течение продолжительного времени, из-за накопления масла, карты начнут слипаться, и это приведет к вашей случайности. Чем интенсивнее используется колода, тем больше вероятность того, что две или более смежные карты будут слипаться, и тем чаще это будет происходить.
Далее, предположительно, две дубинки и валет сердец слипаются. Они могут в конечном итоге слипаться на время вашей перетасовки, никогда не отделяясь. Это может быть имитировано в компьютерной программе, но это не так с процедурой R Stachyra.
Также у stachyra есть переменная манипулирования "mixprob". Без полного понимания этой переменной, это немного черный ящик. Вы можете неправильно установить его, влияя на результаты. Итак, я хотел убедиться, что его интуиция была правильной. Поэтому я проверил это вручную.
Я перетасовал колоду 20 раз вручную, в двух разных случаях (всего 40 перетасовок). Во-первых, я просто перетасовал ружье, держа правый и левый порезы близко к четному. Во втором случае я сознательно отрезаю колоду от середины колоды (1/3, 2/5, 1/4 и т. Д.), Прежде чем сделать равномерный разрез для перемешивания. Во втором случае у меня было ощущение, что, обрезая колоду перед перетасовкой и избегая середины, я мог быстрее вводить диффузию в колоду, чем обычная перетасовка.
Вот результаты. Сначала прямолинейное перетасовывание:
А вот рубка колоды в сочетании с перетасовкой:
Похоже, что энтропия максимизируется примерно за половину времени претензии стачиры. Кроме того, моя интуиция была верна, что обрезание колоды преднамеренно было удалено от середины, прежде чем перетасовка риффла действительно привнесла больше диффузии в колоду. Однако после примерно 5 перемешиваний это уже не имело большого значения. Вы можете видеть, что после примерно 6-7 перемешиваний энтропия увеличивается до 10-12, как утверждают мои стачиры. Может ли быть достаточно, что 7 shuffles достаточно, или я ослеп?
Вы можете увидеть мои данные на Google Sheets . Возможно, я записал одну или две игральные карты неправильно, поэтому я не могу гарантировать 100% точность данных.
Важно, чтобы ваши выводы также были независимо проверены. Брэд Манн из факультета математики Гарвардского университета изучил, сколько раз потребуется перетасовать колоду карт, прежде чем предсказуемость любой карты в колоде станет полностью непредсказуемой (энтропия Шеннона максимальна). Его результаты можно найти в этом 33-страничном PDF .
Что интересно в его выводах, так это то, что он на самом деле независимо проверяет статью Перси Диакониса , опубликованную в 1990 году в газете «Нью-Йорк Таймс» , которая утверждает, что 7 тасовок достаточно для тщательного смешивания колоды игральных карт с помощью риффл-тасовки.
Брэд Манн просматривает несколько различных математических моделей в перетасовке, в том числе цепи Маркова, и приходит к следующему выводу:
Это примерно 11,7 при n = 52, что означает, что, согласно этой точке зрения, мы ожидаем, что в среднем потребуется 11 или 12 перемешиваний для рандомизации реальной колоды карт. Обратите внимание, что это значительно больше, чем 7.
Брэд Манн просто самостоятельно проверил результат стачиры, а не мой. Итак, я посмотрел поближе на свои данные и обнаружил, что 7 перемешиваний недостаточно. Во-первых, теоретическая максимальная энтропия Шеннона в битах для любой карты в колоде составляет log (52) / log (2) ~ = 5,7 бит. Но мои данные никогда не превышают 5 бит. Любопытно, я создал массив из 52 элементов в Python, перетасовал этот массив:
>>> import random
>>> r = random.SystemRandom()
>>> d = [x for x in xrange(1,52)]
>>> r.shuffle(d)
>>> print d
[20, 51, 42, 44, 16, 5, 18, 27, 8, 24, 23, 13, 6, 22, 19, 45, 40, 30, 10, 15, 25, 37, 52, 34, 12, 46, 48, 3, 26, 4, 1, 38, 32, 14, 43, 7, 31, 50, 47, 41, 29, 36, 39, 49, 28, 21, 2, 33, 35, 9, 17, 11]
Расчет его энтропии на карту дает около 4,8 бит. Выполнение этого примерно в дюжине раз показывает аналогичные результаты, варьирующиеся от 5,2 до 4,6 бита, в среднем от 4,8 до 4,9. Так что посмотреть на необработанное значение энтропии моих данных недостаточно, в противном случае я могу назвать это хорошим при 5 перемешиваниях.
Когда я смотрю поближе на свои данные, я заметил количество «нулевых сегментов». Это сегменты, в которых нет данных для дельт между гранями карт для этого номера. Например, при вычитании стоимости двух смежных карт результат «15» отсутствует после вычисления всех 52 дельт.
Я вижу, что в конечном итоге он составляет около 17-18 «нулевых ведер» около 11-12 перемешиваний. Конечно же, моя перетасованная колода через Python имеет в среднем 17-18 «нулевых сегментов», с максимумом 21 и минимумом 14. Почему 17-18 является окончательным результатом, я не могу объяснить ... пока. Но, похоже, мне нужны оба ~ 4,8 бита энтропии И 17 "нулевых сегментов".
С моей обычной перетасовкой, это 11-12 перемешиваний. С моей копией, это 6-7. Так что, когда дело доходит до игр, я бы порекомендовал срезать и перемешать. Это не только гарантирует, что верхняя и нижняя карты смешиваются в колоде на каждом шаффле, но и просто быстрее, чем 11-12 шаффлов. Я не знаю о вас, но когда я играю в карточные игры со своей семьей и друзьями, они не достаточно терпеливы, чтобы я выполнил 12 перемешиваний.