En la entrada anterior planteé una cuestión de probabilidad en un juego de cartas con la baraja española.
¿Cuál es la probabilidad de ganar el juego sin que haya coincidido ninguna vez la carta destapada con el número cantado?
O su complementario, ¿cuál es la probabilidad de "perder"? Entendemos perder en este contexto como que coincida en algún momento la carta destapada con el número cantado.
Una posible idea es utilizar la estrategia exhaustiva: construir TODAS las posibles barajas (ordenamientos de cartas) y comprobar en cuántas de ellas se gana/pierde el juego. A mano está claro que no lo vamos a hacer, pero ¿podemos hacer un programa que realice esa tarea por nosotros?
He realizado un programa en Python que implementa esta estrategia exhaustiva (ver código).
Por ejemplo, con un mazo de cartas de 4 números y 4 palos (16 cartas), el número de permutaciones es 63.063.000 (fórmula de las permutaciones con elementos repetidos) y la probabilidad de ganar el juego es aproximadamente 0.011869416297987727 (~1,19%). Para crear y recorrer todas las barajas posibles, mi ordenador ha tardado algo menos de 4 minutos y medio.
El problema viene cuando ponemos las condiciones del problema: 13 números y 4 palos. El número de permutaciones (barajas distintas) es:
92.024.242.230.271.040.357.108.320.801.872.044.844.750.000.000.000
Y, claro, va a llevar muuuuuucho más tiempo llegar a la solución de esa manera.
Así que, una vez más, aunque tengamos un algoritmo que resuelve el problema, la realidad con un ordenador medio es que no es factible llegar a la solución en un tiempo razonable.
¿Habrá alguna estrategia alternativa? A seguir pensando...
PD: La librería itertools de Python tiene una función para calcular todas las variaciones de un conjunto, pero no tiene ninguna para hacer lo propio con multiconjuntos (elementos que se repiten). Por ello se ha implementado la función permutaciones_repeticion dentro del programa para evitar repetir ordenamientos ya contados.
No hay comentarios:
Publicar un comentario