Wiem, że ten post ma prawie 4 lata, ale jestem hobbystycznym kryptoanalitykiem i studiuję szyfrów do gry . W rezultacie wielokrotnie powracałem do tego postu, aby wyjaśnić tasowanie talii jako źródło entropii do losowego wpisywania talii. W końcu postanowiłem zweryfikować odpowiedź przez stachyrę, ręcznie tasując talię i oceniając entropię talii po każdym tasowaniu.
TL; DR, aby zmaksymalizować entropię pokładu:
- Aby przetasować tylko riffle, potrzebujesz 11-12 przetasowań.
- Aby najpierw wyciąć talię, a następnie przetasować riffle, potrzebujesz tylko 6-7 cięć i tasowania.
Po pierwsze, wszystko, co wspominała Stachyra do obliczania entropii Shannona, jest poprawne. Można go sprowadzić w ten sposób:
- Przydziel numerycznie unikalną wartość każdej z 52 kart w talii.
- Potasuj talię.
- Dla n = 0 do n = 51, zanotuj każdą wartość (n - (n + 1) mod 52) mod 52
- Policz liczbę wystąpień 0, 1, 2, ..., 49, 50, 51
- Znormalizuj te rekordy, dzieląc każdy przez 52
- Dla i = 1 do i = 52, oblicz -p_i * log (p_i) / log (2)
- Zsumuj wartości
Stachyra przyjmuje jedno subtelne założenie, że wprowadzenie losowego losu w programie komputerowym przyniesie trochę bagażu. Dzięki papierowym kartom do gry, gdy się przyzwyczają, olej z rąk przenosi się na karty. Z biegiem czasu, z powodu nagromadzenia ropy, karty zaczną się sklejać, a to skończy się tasowaniem. Im bardziej intensywnie używana talia, tym bardziej prawdopodobne, że dwie lub więcej sąsiadujących ze sobą kart sklei się i tym częściej będzie się to zdarzało.
Co więcej, przypuszczalnie dwa kluby i walet kier trzymają się razem. Mogą skończyć się razem podczas tasowania, nigdy się nie rozdzielając. Można to naśladować w programie komputerowym, ale nie jest tak w przypadku procedury R. Stachyry.
Ponadto Stachyra ma zmienną manipulacyjną „mixprob”. Bez pełnego zrozumienia tej zmiennej jest to trochę czarna skrzynka. Możesz go nieprawidłowo ustawić, wpływając na wyniki. Chciałem więc upewnić się, że jego intuicja jest poprawna. Więc zweryfikowałem to ręcznie.
Przetasowałem talię 20 razy ręcznie, w dwóch różnych przypadkach (40 losowych tasowań). W pierwszej kolejności po prostu przetasowałem, trzymając prawe i lewe cięcia prawie równe. W drugim przypadku celowo odciąłem talię od jej środka (1/3, 2/5, 1/4 itd.), Zanim wykonałem równomierne cięcie dla przetasowania riffle. Moje drugie przeczucie było takie, że przecinając pokład przed tasowaniem i trzymając się z dala od środka, mogłem wprowadzić dyfuzję do pokładu szybciej niż tasowanie karabinu podstawowego.
Oto wyniki. Po pierwsze, tasowanie karabinu prostego:
A oto cięcie talii w połączeniu z tasowaniem karabinów:
Wydaje się, że entropia zostaje zmaksymalizowana w około 1/2 czasu roszczenia przez Stachyrę. Co więcej, moja intuicja była słuszna, że celowe odcięcie talii od środka najpierw, zanim tasowanie karabinów wprowadziło więcej dyfuzji do talii. Jednak po około 5 losach nie miało to już większego znaczenia. Widać, że po około 6-7 przetasowaniach entropia jest zmaksymalizowana w porównaniu z 10-12, gdy roszczenie uczyniło moją stachyrę. Czy to możliwe, że 7 tasowań jest wystarczających, czy też jestem oślepiony?
Możesz zobaczyć moje dane w Arkuszach Google . Możliwe, że źle zapisałem jedną lub dwie karty do gry, więc nie mogę zagwarantować 100% dokładności danych.
Ważne jest, aby twoje ustalenia również były niezależnie weryfikowane. Brad Mann z Wydziału Matematyki na Uniwersytecie Harvarda zbadał, ile razy potrzeba potasować talię kart, zanim przewidywalność dowolnej karty w talii jest całkowicie nieprzewidywalna (entropia Shannona jest zmaksymalizowana). Jego wyniki można znaleźć w tym 33-stronicowym pliku PDF .
Co ciekawe, jego odkrycia polegają na tym, że w rzeczywistości samodzielnie weryfikuje artykuł Persi Diaconisa z 1990 roku napisany przez New York Timesa , który twierdzi, że 7 tasowań wystarcza do dokładnego wymieszania talii kart do gry za pomocą tasowania riffle.
Brad Mann omija kilka różnych modeli matematycznych, w tym łańcuchy Markowa, i dochodzi do następującego wniosku:
Jest to w przybliżeniu 11,7 dla n = 52, co oznacza, że zgodnie z tym punktem widzenia oczekujemy, że do losowania prawdziwej talii kart potrzeba średnio 11 lub 12 przetasowań. Pamiętaj, że jest to znacznie więcej niż 7.
Brad Mann właśnie niezależnie zweryfikował wynik stachyry, a nie mój. Spojrzałem więc bliżej na moje dane i odkryłem, dlaczego 7 przetasowań nie jest wystarczających. Po pierwsze, teoretyczna maksymalna entropia Shannona w bitach dla dowolnej karty w talii to log (52) / log (2) ~ = 5,7 bitów. Ale moje dane nigdy tak naprawdę nie łamią się znacznie powyżej 5 bitów. Co ciekawe, stworzyłem tablicę 52 elementów w Pythonie, przetasowałem tę tablicę:
>>> 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]
Obliczenie entropii na kartę daje około 4,8 bitów. Wykonanie tego kilkanaście razy pokazuje podobne wyniki w zakresie od 5,2 do 4,6 bitów, przy średniej od 4,8 do 4,9. Więc spojrzenie na surową wartość entropii moich danych nie wystarczy, w przeciwnym razie mógłbym to nazwać dobrą przy 5 losowych losach.
Kiedy przyglądam się bliżej moim danym, zauważyłem liczbę „zerowych segmentów”. Są to segmenty, w których nie ma danych dotyczących różnic między powierzchniami kart dla tego numeru. Na przykład, odejmując wartość dwóch sąsiednich kart, nie ma wyniku „15” po obliczeniu wszystkich 52 delt.
Widzę, że ostatecznie ustala się około 17-18 „zerowych wiader” około 11-12 przetasowań. Rzeczywiście, moja tasowana talia za pomocą Pythona wynosi średnio 17–18 „zero wiader”, z wysokim 21 i niskim 14. Dlaczego 17-18 jest ustalonym wynikiem, nie potrafię wyjaśnić… jeszcze. Wygląda jednak na to, że chcę zarówno ~ 4,8 bitów entropii ORAZ 17 „zerowych koszy”.
Z moim tasowaniem karabinu podstawowego to 11-12 przetasowań. W moim przypadku „cut and shuffle” to 6-7. Jeśli chodzi o gry, polecam cut-and-shuffles. Gwarantuje to nie tylko, że górne i dolne karty mieszają się w talii przy każdym tasowaniu, ale jest też po prostu szybsze niż 11-12 tasowań. Nie wiem o tobie, ale kiedy gram w gry karciane z rodziną i przyjaciółmi, nie są oni wystarczająco cierpliwi, aby wykonać 12 losowych riffów.