Problemas del mundo real con barajar ingenuamente

Estoy escribiendo una serie de artículos destinados a enseñar conceptos de programación iniciales a través del uso de temas relacionados con el póker. Actualmente, estoy trabajando en el tema de barajar.

Como Jeff Atwood señala en CodingHorror.com , un método de mezcla simple (iterar a través de una matriz e intercambiar cada carta con una carta aleatoria en otro lugar de la matriz) crea una distribución desigual de permutaciones. En una aplicación real, solo usaría el Knuth Fisher-Yates shuffle para una aleatoriedad más uniforme. Pero, no quiero empantanar una explicación de los conceptos de programación con el algoritmo mucho menos codificador.

Esto lleva a la pregunta: ¿Cuánta ventaja tendría un black-hat si supieran que estás usando un naive shuffle de un mazo de 52 cartas? Parece que sería infinitamente pequeño.

0

5 Respuestas

El knuth shuffle es un cambio insignificante en comparación con el ingenuo shuffle: simplemente intercambia con cualquier carta en la sección restante (no revuelta) de la baraja en lugar de en cualquier lugar de la baraja. Si piensas que es una elección repetida de la siguiente carta en orden de las cartas no elegidas restantes, también es bastante intuitiva.

Personalmente, creo que enseñar a los estudiantes un algoritmo pobre cuando el apropiado no es más complicado (¡y más fácil de visualizar!) Es un mal enfoque.

0
agregado
Estoy de acuerdo. En este caso, creo que se deben mostrar ambos algoritmos y una explicación de por qué uno es mejor que el otro. En este caso, es un cambio muy pequeño y en mi opinión no lo hace más complicado.
agregado el autor some, fuente

Solo como un aparte, había una entrada de blog en ITtoolbox sobre barajado que puede ser de interés a la hora de simular una barajadura.

En cuanto a su pregunta, ¡considere que hay 52! las configuraciones de la baraja con las que uno puede comenzar y que pueden jugar un papel en donde aterrizan las cosas, como en el ejemplo de Jeff de la baraja de 3 cartas, tenga en cuenta que el 1 en el sobrerrepresentado ocurre en cada ranura una vez. También ten en cuenta que él dice que tendrías que tener algunos miles de ejemplos antes de que sea aparente dónde está la ventaja, pero con un mazo no es probable que comiences de nuevo con el mismo mazo inicial exacto, ¿o sí? Tomarías las cartas repartidas y las pondrías en el fondo y las barajarías, lo que probablemente no repita, pensaría.

0
agregado

No es como si estuvieras escribiendo un programa de póquer que se utilizará para un sitio real de apuestas en línea. Una habilidad para que alguien haga trampa en el programa no es un gran problema cuando le está enseñando a la gente a programar.

Deje una nota que diga que este es un modelo pobre del mundo real (con una referencia a él como un posible defecto de seguridad), y solo continúe con la enseñanza.

0
agregado
En el momento en que escribí eso, no comprendí que la diferencia es muy trivial. Estoy de acuerdo: diles el buen algoritmo de barajado. Tal vez los detalles exactos sobre "por qué" pueden ser "referirse a esta literatura".
agregado el autor Keith B, fuente
No, pero las personas que lean estos artículos pueden continuar. Moverse bien es importante, porque hacerlo mal ha causado un descanso antes.
agregado el autor afrazier, fuente

Subjetivo.

Parece que sería infinitamente pequeño.

De acuerdo.

0
agregado

It turns out the advantage is quite significant. Check out this article

Parte del problema es el algoritmo defectuoso, pero otra parte es la suposición de que puede obtener números "aleatorios" de una computadora.

0
agregado