Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Algoritmos y
Estructura de
Datos I
1
Generadores
Actualmente, son muchas las aplicaciones que tienen los números
aleatorios. Si analizamos el mundo real, encontramos que ocurren eventos
de manera aleatoria constantemente. Incluso, nosotros, los humanos, nos
comportamos de manera aleatoria: usamos números aleatorios en los
juegos de azar, en las finanzas, en el ámbito informático, etcétera.
Números aleatorios
Antes de comenzar explicando cómo podemos generar los números
aleatorios, debemos saber qué son.
Un generador produce
una secuencia de Generación de números aleatorios
números
pseudoaleatorios.
Mientras más Como un número aleatorio es generado al azar, se dice que los algoritmos,
propiedades cumplan en realidad, generan números pseudoaleatorios, debido a que no son
respecto de los realmente aleatorios, sino que responden a una fórmula y al proceso del
números aleatorios, algoritmo, para la generación de dicho número.
mejores números
pseudoaleatorios
producirán. Analicemos algunas formas en que se pueden generar estos números
pseudoaleatorios.
2
Una manera corresponde a usar el reloj del sistema. Si usamos el valor de
los segundos para arrojar un número aleatorio cuando se lo solicite,
podríamos considerar que queremos generar números aleatorios binarios;
es decir, ceros y unos. Si usamos los segundos del reloj, podemos utilizar su
paridad: ante un número par, arrojamos un 0 y, ante un impar, un 1.
Esto nos hace pensar que podríamos solucionar dicho problema usando
una unidad de tiempo más pequeña: en vez de segundos, podríamos usar
microsegundos. Pero esto no resuelve el problema del todo: la secuencia
de números generada no será aleatoria. Necesitamos que cumpla con
ciertas propiedades, para que podamos obtener un buen conjunto de
números pseudoaleatorios.
3
Los generadores de números aleatorios nunca son perfectos. En general,
cumplen algunas propiedades, pero fallan otras pruebas estadísticas. En
función de ello, podremos distinguir cuál es mejor o peor.
Donde:
Xi+1=AXi(mod M)
Esto significa que calculamos el nuevo valor aleatorio Xi+1 en función del
valor aleatorio anterior Xi. Esto se realiza calculando el producto del valor
aleatorio anterior por una constante A, para, luego, dividirlo por M y, así,
obtener, finalmente, su resto.
1≤ X0 <M
4
Este generador posee la propiedad de ser periódico, es decir, una vez que
se genera por segunda vez un mismo valor, la secuencia comienza a
repetirse por segunda, tal como fue generada anteriormente. Esto nos
permite arribar a otra observación:
Implementación
x[i+1] = A * x[i] % M
x[i+1] = A * x[i] % M
5
Entonces, también podríamos hacerlo de la siguiente manera:
x[i] = A * x[i] % M
Es decir, hacer que el nuevo valor sea sobrescrito usando el valor anterior.
Es así como surge una expresión equivalente que realiza una reordenación
que permite realizar cálculos, sin peligro de desbordamiento.
Xi+1=A(Xi(mod Q)-R[Xi/Q]+M𝛿(Xi)
6
Referencias
Weiss, M. A. (2013). Aleatorización. En M. Martín-Romo (Ed.), Estructuras de
datos en Java (pp. 383-392). Madrid, ES: Pearson.