Ich weiß, dass dieser Beitrag fast 4 Jahre alt ist, aber ich bin ein Hobby-Kryptoanalytiker und habe Spielkarten-Chiffren studiert . Infolgedessen bin ich immer wieder auf diesen Beitrag zurückgekommen, um das Mischen von Decks als Entropiequelle für die zufällige Eingabe des Decks zu erklären. Schließlich beschloss ich, die Antwort durch Stachyra zu überprüfen, indem ich das Deck von Hand mischte und die Deckentropie nach jedem Mischen schätzte.
TL; DR, um die Deckentropie zu maximieren:
- Für nur Riffle Shuffling benötigen Sie 11-12 Shuffles.
- Um zuerst das Deck zu schneiden und dann das Riffle zu mischen, benötigen Sie nur 6-7 Cut-and-Shuffles.
Zunächst einmal ist alles richtig, was Stachyra zur Berechnung der Shannon-Entropie erwähnt hat. Es kann folgendermaßen eingekocht werden:
- Weisen Sie jeder der 52 Karten im Deck numerisch einen eindeutigen Wert zu.
- Mische das Deck.
- Notieren Sie für n = 0 bis n = 51 jeden Wert von (n - (n + 1) mod 52) mod 52
- Zählen Sie die Anzahl der Vorkommen von 0, 1, 2, ..., 49, 50, 51
- Normalisieren Sie diese Datensätze, indem Sie sie jeweils durch 52 teilen
- Berechnen Sie für i = 1 bis i = 52 -p_i * log (p_i) / log (2)
- Summiere die Werte
Wenn Stachyra eine subtile Annahme macht, ist die Implementierung eines menschlichen Shuffle in einem Computerprogramm mit etwas Gepäck verbunden. Bei papierbasierten Spielkarten wird Öl aus Ihren Händen auf die Karten übertragen, sobald sie verwendet werden. Im Laufe der Zeit werden die Karten aufgrund von Ölansammlungen zusammenkleben und dies wird in Ihrem Shuffle enden. Je stärker das Deck genutzt wird, desto wahrscheinlicher werden zwei oder mehr benachbarte Karten zusammenkleben und desto häufiger wird es passieren.
Weiter angenommen, die beiden Clubs und Jack of Hearts halten zusammen. Sie können für die Dauer Ihres Mischens zusammenkleben und sich nie trennen. Dies könnte in einem Computerprogramm nachgeahmt werden, aber dies ist bei der R-Routine von stachyra nicht der Fall.
Stachyra hat auch eine Manipulationsvariable "mixprob". Ohne diese Variable vollständig zu verstehen, handelt es sich um eine Art Black Box. Sie können es falsch einstellen, was sich auf die Ergebnisse auswirkt. Also wollte ich sicherstellen, dass seine Intuition korrekt war. Also habe ich es von Hand überprüft.
Ich habe das Deck 20 Mal von Hand gemischt, in zwei verschiedenen Fällen (insgesamt 40 Mischen). In erster Linie habe ich nur das Riffeln gemischt und dabei die rechten und linken Schnitte nahezu gleichmäßig gehalten. Im zweiten Fall schneide ich das Deck absichtlich von der Mitte des Decks weg (1/3, 2/5, 1/4 usw.), bevor ich einen gleichmäßigen Schnitt für das Riffle Shuffle mache. Mein Bauchgefühl in der zweiten Instanz war, dass ich durch Schneiden des Decks vor dem Mischen und Halten von der Mitte weg eine Diffusion schneller in das Deck einbringen konnte als das Mischen von Standard-Riffeln.
Hier sind die Ergebnisse. Erstens, gerade Riffel mischen:
Und hier wird das Deck in Kombination mit dem Mischen von Riffs geschnitten:
Es scheint, dass die Entropie in etwa der Hälfte der Zeit der Behauptung durch Stachyra maximiert ist. Außerdem war meine Intuition richtig, dass das Decks absichtlich absichtlich von der Mitte weggeschnitten wurde, bevor das Mischen der Riffs mehr Diffusion in das Deck einbrachte. Nach ungefähr 5 Schlurfen war es jedoch nicht mehr wirklich wichtig. Sie können sehen, dass nach ungefähr 6-7 Mischen die Entropie maximiert ist, gegenüber den 10-12, als die Behauptung mein Stachyra machte. Könnte es möglich sein, dass 7 Shuffles ausreichen, oder werde ich geblendet?
Sie können meine Daten bei Google Sheets sehen . Es ist möglich, dass ich eine oder zwei Spielkarten falsch aufgenommen habe, daher kann ich keine 100% ige Genauigkeit der Daten garantieren.
Es ist wichtig, dass Ihre Ergebnisse auch unabhängig überprüft werden. Brad Mann vom Institut für Mathematik der Harvard University untersuchte, wie oft es dauern würde, ein Kartenspiel zu mischen, bevor die Vorhersagbarkeit einer Karte im Kartenspiel völlig unvorhersehbar ist (die Shannon-Entropie ist maximiert). Seine Ergebnisse finden Sie in diesem 33-seitigen PDF .
Interessant an seinen Ergebnissen ist, dass er tatsächlich einen Artikel der New York Times von 1990 von Persi Diaconis unabhängig überprüft , der behauptet, dass 7 Shuffles ausreichen, um ein Kartenspiel über das Riffle Shuffle gründlich zu mischen.
Brad Mann geht beim Mischen einige verschiedene mathematische Modelle durch, einschließlich Markov-Ketten, und kommt zu folgendem Ergebnis:
Dies ist ungefähr 11,7 für n = 52, was bedeutet, dass wir unter diesem Gesichtspunkt erwarten, dass durchschnittlich 11 oder 12 Mischvorgänge erforderlich sind, um ein echtes Kartenspiel zufällig zu ordnen. Beachten Sie, dass dies wesentlich größer als 7 ist.
Brad Mann überprüfte nur unabhängig das Ergebnis von Stachyra und nicht meins. Also habe ich mir meine Daten genauer angesehen und festgestellt, warum 7 Shuffles nicht ausreichen. Zunächst einmal beträgt die theoretische maximale Shannon-Entropie in Bit für jede Karte im Deck log (52) / log (2) ~ = 5,7 Bit. Aber meine Daten brechen nie wirklich viel über 5 Bits. Seltsamerweise habe ich in Python ein Array mit 52 Elementen erstellt und dieses Array gemischt:
>>> 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]
Die Berechnung der Entropie pro Karte ergibt etwa 4,8 Bit. Wenn Sie dies etwa ein Dutzend Mal tun, werden ähnliche Ergebnisse zwischen 5,2 Bit und 4,6 Bit angezeigt, wobei der Durchschnitt 4,8 bis 4,9 beträgt. Es reicht also nicht aus, den Rohentropiewert meiner Daten zu betrachten, sonst könnte ich es bei 5 Shuffles als gut bezeichnen.
Bei näherer Betrachtung meiner Daten bemerkte ich die Anzahl der "Null-Buckets". Dies sind Eimer, in denen für diese Nummer keine Daten für Deltas zwischen Kartenflächen vorhanden sind. Wenn beispielsweise der Wert zweier benachbarter Karten subtrahiert wird, gibt es kein "15" -Ergebnis, nachdem alle 52 Deltas berechnet wurden.
Ich sehe, dass es sich irgendwann um 17-18 "Zero Buckets" um 11-12 Shuffles einstellt. Sicher genug, mein gemischtes Deck über Python hat einen Durchschnitt von 17 bis 18 "Null-Eimern", mit einem Hoch von 21 und einem Tief von 14. Warum 17 bis 18 das festgelegte Ergebnis ist, kann ich noch nicht erklären. Aber es scheint, dass ich sowohl ~ 4,8 Bit Entropie als auch 17 "Null-Eimer" will.
Mit meinem Stock Riffle Shuffling sind das 11-12 Shuffles. Bei meinem Cut-and-Shuffle sind das 6-7. Wenn es um Spiele geht, würde ich Cut-and-Shuffles empfehlen. Dies garantiert nicht nur, dass die oberen und unteren Karten bei jedem Shuffle in das Deck gemischt werden, es ist auch einfach schneller als 11-12 Shuffles. Ich weiß nichts über dich, aber wenn ich mit meiner Familie und meinen Freunden Kartenspiele spiele, sind sie nicht geduldig genug, um 12 Riffel-Shuffles durchzuführen.