Je sais que ce poste a presque 4 ans, mais je suis un cryptanalyste amateur et j'étudie les chiffres des cartes à jouer . En conséquence, je suis revenu à maintes reprises sur ce post pour expliquer le brassage de deck comme une source d'entropie pour la saisie aléatoire du deck. Enfin, j'ai décidé de vérifier la réponse par stachyre en mélangeant le jeu à la main et en estimant l'entropie du jeu après chaque mélange.
TL; DR, pour maximiser l'entropie du pont:
- Pour un brassage rapide seulement, vous avez besoin de 11 à 12 shuffles.
- Pour couper le pont en premier, puis mélanger les riffles, vous n'avez besoin que de 6-7 coupes-et-shuffles.
Tout d'abord, tout ce que Stachyra a mentionné pour calculer l'entropie de Shannon est correct. Il peut se résumer ainsi:
- Attribuez numériquement une valeur unique à chacune des 52 cartes du jeu.
- Mélangez le jeu.
- Pour n = 0 à n = 51, enregistrer chaque valeur de (n - (n + 1) mod 52) mod 52
- Comptez le nombre d'occurrences de 0, 1, 2, ..., 49, 50, 51
- Normaliser ces enregistrements en divisant chacun par 52
- Pour i = 1 à i = 52, calculez -p_i * log (p_i) / log (2)
- Additionner les valeurs
Là où stachyra fait une supposition subtile, c'est que la mise en œuvre d'un remaniement humain dans un programme informatique va venir avec des bagages. Avec les cartes à jouer sur papier, au fur et à mesure qu'elles s'utilisent, l'huile de vos mains est transférée sur les cartes. Sur une longue période, en raison de l'accumulation d'huile, les cartes commenceront à coller ensemble, et cela se terminera dans votre mélange. Plus le jeu est utilisé, plus deux cartes adjacentes ou plus sont susceptibles de rester ensemble, et plus cela se produit fréquemment.
De plus, supposons que les deux clubs et le valet de cœur restent ensemble. Ils peuvent finir coincés ensemble pendant la durée de votre brassage, sans jamais se séparer. Cela pourrait être imité dans un programme informatique, mais ce n'est pas le cas avec la routine R de stachyra.
De plus, stachyra a une variable de manipulation "mixprob". Sans bien comprendre cette variable, c'est un peu une boîte noire. Vous pouvez le définir de manière incorrecte, affectant les résultats. Donc, je voulais m'assurer que son intuition était correcte. Je l'ai donc vérifié à la main.
J'ai mélangé le jeu 20 fois à la main, dans deux cas différents (40 mélanges au total). Dans le premier cas, je viens de mélanger, en gardant les coupes droite et gauche presque égales. Dans le deuxième cas, j'ai coupé délibérément le jeu loin du milieu du jeu (1/3, 2/5, 1/4, etc.) avant de faire une coupe uniforme pour le shuffle du fusil. Mon instinct dans le deuxième cas était qu'en coupant le pont avant de mélanger, et en restant loin du milieu, je pouvais introduire la diffusion dans le pont plus rapidement que le brassage de fusil d'origine.
Voici les résultats. Tout d'abord, le réarrangement du fusil droit:
Et voici couper le pont combiné avec un mélange de fusils:
Il semble que l'entropie soit maximisée dans environ la moitié du temps de la revendication par stachyra. De plus, mon intuition était correcte: couper le pont délibérément loin du milieu en premier, avant de mélanger le fusil, introduisait plus de diffusion dans le pont. Cependant, après environ 5 shuffles, cela n'avait plus vraiment d'importance. Vous pouvez voir qu'après environ 6-7 shuffles, l'entropie est maximisée, contre 10-12 car la revendication a fait mon stachyre. Serait-il possible que 7 shuffles soient suffisants, ou suis-je aveuglé?
Vous pouvez voir mes données sur Google Sheets . Il est possible que j'aie enregistré une ou deux cartes à jouer de manière incorrecte, donc je ne peux pas garantir une précision de 100% avec les données.
Il est important que vos résultats soient également vérifiés de manière indépendante. Brad Mann, du Département de mathématiques de l'Université de Harvard, a étudié le nombre de fois qu'il faudrait pour mélanger un jeu de cartes avant que la prévisibilité d'une carte du jeu soit complètement imprévisible (l'entropie de Shannon est maximisée). Ses résultats se trouvent dans ce PDF de 33 pages .
Ce qui est intéressant avec ses conclusions, c'est qu'il vérifie en fait de manière indépendante un article du Persi Diaconis publié dans le New York Times en 1990 , qui prétend que 7 shuffles sont suffisants pour bien mélanger un jeu de cartes via le riffle shuffle.
Brad Mann parcourt quelques modèles mathématiques différents dans le brassage, y compris les chaînes de Markov, et arrive à la conclusion suivante:
C'est environ 11,7 pour n = 52, ce qui signifie que, selon ce point de vue, on s'attend en moyenne à 11 ou 12 shuffles pour randomiser un vrai jeu de cartes. Notez que cela est nettement supérieur à 7.
Brad Mann vient de vérifier indépendamment le résultat de Stachyra, et non le mien. J'ai donc regardé mes données de plus près et j'ai découvert pourquoi 7 shuffles ne suffisaient pas. Tout d'abord, l'entropie théorique maximale de Shannon en bits pour n'importe quelle carte du jeu est log (52) / log (2) ~ = 5,7 bits. Mais mes données ne cassent jamais vraiment bien au-dessus de 5 bits. Curieux, j'ai créé un tableau de 52 éléments en Python, mélangé ce tableau:
>>> 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]
Le calcul de son entropie par carte donne environ 4,8 bits. Faire cela une douzaine de fois montre des résultats similaires variant entre 5,2 bits et 4,6 bits, avec 4,8 à 4,9 comme moyenne. Donc, regarder la valeur d'entropie brute de mes données ne suffit pas, sinon je pourrais l'appeler bien à 5 shuffles.
Quand je regarde de plus près mes données, j'ai remarqué le nombre de "zéro seaux". Ce sont des compartiments où il n'y a pas de données pour les deltas entre les faces de carte pour ce nombre. Par exemple, lors de la soustraction de la valeur de deux cartes adjacentes, il n'y a pas de résultat "15" après que les 52 deltas ont été calculés.
Je vois qu'il finit par s'installer autour de 17-18 "zéro seaux" autour de 11-12 shuffles. Effectivement, mon deck mélangé via Python fait en moyenne 17-18 "zéro seau", avec un maximum de 21 et un minimum de 14. Pourquoi 17-18 est le résultat réglé, je ne peux pas l'expliquer ... pour le moment. Mais, il semble que je veuille à la fois ~ 4,8 bits d'entropie ET 17 "seaux zéro".
Avec mon stock de fusils, c'est 11-12 shuffles. Avec mon découpage, c'est 6-7. Donc, en ce qui concerne les jeux, je recommanderais de couper et mélanger. Non seulement cela garantit que les cartes du haut et du bas se mélangent dans le jeu à chaque mélange, c'est aussi tout simplement plus rapide que les 11 à 12 mélanges. Je ne sais pas pour vous, mais quand je joue à des jeux de cartes avec ma famille et mes amis, ils ne sont pas assez patients pour que je fasse 12 shuffles shiffles.