Я знаю, що цій посаді майже 4 роки, але я є любителем криптоаналітики і вивчаю шифри гральних карт . Як результат, я знову і знову повертаюся до цієї публікації, щоб пояснити переміщення колоди як джерело ентропії для випадкового клавіші колоди. Нарешті, я вирішив перевірити відповідь стахірою, переміщаючи колоду вручну та оцінивши ентропію колоди після кожного перетасування.
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 тощо), перш ніж робити рівномірний розріз для перестрілки. Моє відчуття кишечника в другому випадку полягало в тому, що, вирізавши колоду перед перетасуванням і тримаючись подалі від середини, я міг би ввести дифузію в палубу швидше, ніж перетасування запасів.
Ось результати. По-перше, пряме переміщення гвинтівки:
А ось розрізання настилу в поєднанні з перетасуванням гвинтівки:
Здається, що ентропія максимально збільшується приблизно в 1/2 часу вимоги стахірою. Далі, моя інтуїція була правильною, що нарізування колоди спочатку навмисно віддаляється від середини, перш ніж перетасування стрілецької зброї вводить в палубу більше дифузії. Однак, приблизно через 5 перетасовань, це вже не мало особливого значення. Ви можете бачити, що приблизно через 6-7 перетасовок, ентропія максимальна, порівняно з 10-12, як заява моєї стахіри. Чи можливо, що 7 перетасовань достатньо, або я засліплений?
Мої дані ви можете побачити на Google Таблицях . Цілком можливо, що я записав гральну карту або дві неправильно, тому не можу гарантувати 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 перестрілок.