Sé que esta publicación tiene casi 4 años, pero soy un criptoanalista aficionado, y he estado estudiando juegos de cartas . Como resultado, volví a esta publicación una y otra vez para explicar el barajado de barajas como una fuente de entropía para teclear aleatoriamente la baraja. Finalmente, decidí verificar la respuesta por stachyra barajando el mazo a mano y estimando la entropía del mazo después de cada barajado.
TL; DR, para maximizar la entropía del mazo:
- Para solo la mezcla aleatoria, necesitas 11-12 barajas.
- Para cortar la baraja primero y luego barajar, solo necesitas 6-7 cortar y barajar.
En primer lugar, todo lo que mencionó Stachyra para calcular la entropía de Shannon es correcto. Se puede resumir de esta manera:
- Asigna numéricamente un valor único a cada una de las 52 cartas del mazo.
- Baraja la baraja.
- Para n = 0 a n = 51, registre cada valor de (n - (n + 1) mod 52) mod 52
- Cuente el número de ocurrencias de 0, 1, 2, ..., 49, 50, 51
- Normalice esos registros dividiendo cada uno por 52
- Para i = 1 a i = 52, calcule -p_i * log (p_i) / log (2)
- Suma los valores
Donde Stachyra hace una suposición sutil, es que implementar un shuffle humano en un programa de computadora vendrá con algo de equipaje. Con las cartas de papel, a medida que se usan, el aceite de tus manos se transfiere a las cartas. Durante un tiempo prolongado, debido a la acumulación de aceite, las tarjetas comenzarán a pegarse, y esto terminará en su barajadura. Cuanto más se use el mazo, más probable es que dos o más cartas adyacentes se unan, y con mayor frecuencia sucederá.
Además, se supone que los dos clubes y la jota de corazones se unen. Pueden terminar atrapados juntos durante la duración de su barajado, sin separarse nunca. Esto podría imitarse en un programa de computadora, pero este no es el caso con la rutina R de stachyra.
Además, stachyra tiene una variable de manipulación "mixprob". Sin comprender completamente esta variable, es un poco un cuadro negro. Podría configurarlo incorrectamente, afectando los resultados. Entonces, quería asegurarme de que su intuición fuera correcta. Entonces lo verifiqué a mano.
Barajé la baraja 20 veces a mano, en dos casos diferentes (40 barajas en total). En primera instancia, simplemente revolví los pies, manteniendo los cortes derecho e izquierdo casi parejos. En la segunda instancia, corté el mazo deliberadamente lejos del centro del mazo (1/3, 2/5, 1/4, etc.) antes de hacer un corte parejo para el riffle shuffle. Mi instinto en la segunda instancia fue que cortando la cubierta antes de barajar, y manteniéndome alejado del medio, podía introducir la difusión en la cubierta más rápidamente que la mezcla de rifles.
Aquí están los resultados. Primero, barajar el riffle recto:
Y aquí está cortando la baraja combinada con el riffle shuffling:
Parece que la entropía se maximiza en aproximadamente la mitad del tiempo de la reclamación por estaquira. Además, mi intuición era correcta: cortar el mazo deliberadamente lejos del centro primero, antes de que la combinación de rifles introdujera más difusión en el mazo. Sin embargo, después de unos 5 barajaduras, ya no importaba mucho. Puede ver que después de aproximadamente 6-7 barajaduras, la entropía se maximiza, en comparación con el 10-12, ya que la afirmación hizo que mi estaquira. ¿Podría ser posible que 7 barajaduras sean suficientes o estoy siendo cegado?
Puedes ver mis datos en Google Sheets . Es posible que haya grabado una tarjeta o dos de forma incorrecta, por lo que no puedo garantizar una precisión del 100% con los datos.
Es importante que sus hallazgos también se verifiquen independientemente. Brad Mann, del Departamento de Matemáticas de la Universidad de Harvard, estudió cuántas veces tomaría barajar un mazo de cartas antes de que la previsibilidad de cualquier carta en el mazo sea completamente impredecible (la entropía de Shannon se maximiza). Sus resultados se pueden encontrar en este PDF de 33 páginas .
Lo que es interesante con sus hallazgos es que en realidad está verificando independientemente un artículo del New York Times de 1990 escrito por Persi Diaconis , quien afirma que 7 barajaduras son suficientes para mezclar completamente una baraja de cartas a través de la barajadura.
Brad Mann recorre algunos modelos matemáticos diferentes en el barajado, incluidas las cadenas de Markov, y llega a la siguiente conclusión:
Esto es aproximadamente 11.7 para n = 52, lo que significa que, de acuerdo con este punto de vista, esperamos un promedio de 11 o 12 barajas necesarias para aleatorizar un mazo de cartas real. Tenga en cuenta que esto es sustancialmente mayor que 7.
Brad Mann simplemente verificó independientemente el resultado de Stachyra, y no el mío. Entonces, miré más de cerca mis datos y descubrí por qué 7 barajaduras no son suficientes. En primer lugar, la entropía máxima teórica de Shannon en bits para cualquier carta en el mazo es log (52) / log (2) ~ = 5.7 bits. Pero mis datos nunca se rompen realmente por encima de los 5 bits. Curioso, creé una matriz de 52 elementos en Python, barajé esa matriz:
>>> 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]
Calcular su entropía por tarjeta produce unos 4,8 bits. Hacer esto una docena de veces muestra resultados similares que varían entre 5.2 bits y 4.6 bits, con 4.8 a 4.9 como promedio. Por lo tanto, mirar el valor de entropía sin procesar de mis datos no es suficiente, de lo contrario podría llamarlo bueno a 5 shuffles.
Cuando miro más de cerca mis datos, noté el número de "cubos cero". Estos son depósitos donde no hay datos para deltas entre las caras de las tarjetas para ese número. Por ejemplo, al restar el valor de dos cartas adyacentes, no hay resultado "15" después de que se hayan calculado los 52 deltas.
Veo que eventualmente se establece alrededor de 17-18 "cubos cero" alrededor de 11-12 barajadas. Efectivamente, mi baraja barajada a través de Python promedia 17-18 "cubos cero", con un máximo de 21 y un mínimo de 14. Por qué 17-18 es el resultado establecido, no puedo explicar ... todavía. Pero, parece que quiero ~ 4.8 bits de entropía Y 17 "cubos cero".
Con mi riffle de stock barajando, eso es 11-12 barajaduras. Con mi cortar y mezclar, eso es 6-7. Entonces, cuando se trata de juegos, recomendaría cortar y mezclar. Esto no solo garantiza que las cartas superior e inferior se mezclen en el mazo en cada baraja, sino que también es más rápido que 11-12 barajas. No sé sobre ti, pero cuando estoy jugando juegos de cartas con mi familia y amigos, no son lo suficientemente pacientes como para que yo pueda hacer 12 juegos aleatorios.