1 votos

Conversiones aleatorias

Me encontré con una pregunta en StackOverflow que dice lo siguiente, todo se basa en números naturales:

Dada la función rand5 (que produce números naturales aleatorios 0-4), utilízala para generar un rand7 (que produce números naturales aleatorios 0-7).

He encontrado una solución que hace lo siguiente:

$convertRand(7, 5) = \left [ \sum_{1}^{7}(rand(5)) \right ] \bmod 7$

Por si mis conocimientos de látex no dan para más, lo que hace es sumar 7 veces rand5 y luego obtener el módulo del resultado. Hice pruebas con millones de iteraciones, y la distribución parece bastante justa (nunca perfecta ya que estamos hablando de números aleatorios).

Así pues, la solución genérica sería la siguiente

$convertRand(dest, origin) = \left [ \sum_{1}^{dest}(rand(origin)) \right ] \bmod dest$

He probado con algunos valores (7 para dest, 13 para origen y tal), y la distribución sigue pareciendo bastante uniforme... Sin embargo, no estoy encontrando una manera de probar por qué esto funciona...

Sumando el rand5 7 veces se obtienen números entre 0 y 28, pero con más probabilidad en valores medios (como 14) y menos resultados en los bordes, especialmente en el borde alto...

Sin embargo, si añado a rand5 una cantidad de veces no divisible por 7 y luego aplico el módulo 7, la distribución deja de ser uniforme.

Aquí está la pregunta con mi respuesta en Stackoverflow (sólo para no publicar código aquí):

https://stackoverflow.com/questions/137783/expand-a-random-range-from-1-5-to-1-7/26405409#26405409

Así que, en caso de que mi pregunta específica esté demasiado mezclada en mi escritura... ¿Cómo puedo probar si esta solución genérica es cierta matemáticamente?

Estadísticamente diría que sí, ya que obtengo distribuciones uniformes en múltiples ejecuciones con millones de iteraciones...

0voto

Mischa Puntos 26200

La forma más fácil de refutarlo es mostrar un contraejemplo. Modificaré ligeramente su planteamiento para utilizar números enteros positivos. Digamos que puedes generar aleatoriamente 1's y 2's pero quieres generar aleatoriamente 1's, 2's y 3's.

Con el método propuesto, generaríamos, por ejemplo, un 1 si la suma de 3 números generados aleatoriamente es 0 mod 3, un 2 si la suma es 1 mod 3, y un 3 si la suma es 2 mod 3.

Entonces, ¿cuál es la probabilidad de generar un 1 con esta configuración? La única manera de obtener una suma que es 0 mod 3 es por una de estas dos combinaciones: 111 o 222. Pero la probabilidad de que esto ocurra es (1/8)+(1/8) = 1/4. Como no es igual a 1/3, tu método no funciona.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X