El generador de números pseudoaleatorios (PRNG) se refiere a un algoritmo que utiliza fórmulas matemáticas para producir secuencias de números aleatorios. Los PRNG generan una secuencia de números que se aproximan a las propiedades de los números aleatorios. Un PRNG comienza desde un estado inicial arbitrario utilizando un estado semilla . Muchos números se generan en poco tiempo y también se pueden reproducir más tarde, si se conoce el punto de partida de la secuencia. Por lo tanto, los números son deterministas y eficientes .
¿Por qué necesitamos PRNG?
Con el advenimiento de las computadoras, los programadores reconocieron la necesidad de un medio para introducir la aleatoriedad en un programa de computadora. Sin embargo, por sorprendente que parezca, es difícil lograr que una computadora haga algo por casualidad, ya que la computadora sigue ciegamente las instrucciones dadas y, por lo tanto, es completamente predecible. No es posible generar números verdaderamente aleatorios a partir de cosas deterministas como las computadoras, por lo que PRNG es una técnica desarrollada para generar números aleatorios usando una computadora.
¿Cómo funciona PRNG?
El Generador Congruencial Lineal es el algoritmo más común y antiguo para generar números pseudoaleatorios. El generador está definido por la relación de recurrencia:
Xn+1 = (aXn + c) mod m where X is the sequence of pseudo-random values m, 0 < m - modulus a, 0 < a < m - multiplier c, 0 ≤ c < m - increment x0, 0 ≤ x0 < m - the seed or start value
Generamos el siguiente entero aleatorio utilizando el entero aleatorio anterior, las constantes enteras y el módulo entero. Para comenzar, el algoritmo requiere una semilla inicial, que debe proporcionarse por algún medio. La apariencia de aleatoriedad se proporciona realizando aritmética de módulo. .
Características de PRNG
- Eficiente: PRNG puede producir muchos números en poco tiempo y es ventajoso para aplicaciones que necesitan muchos números
- Determinista: una secuencia dada de números se puede reproducir en una fecha posterior si se conoce el punto de inicio de la secuencia. El determinismo es útil si necesita reproducir la misma secuencia de números nuevamente en una etapa posterior.
- Periódico: los PRNG son periódicos, lo que significa que la secuencia eventualmente se repetirá. Si bien la periodicidad casi nunca es una característica deseable, los PRNG modernos tienen un período tan largo que puede ignorarse para la mayoría de los propósitos prácticos.
Aplicaciones de PRNG
Los PRNG son adecuados para aplicaciones donde se requieren muchos números aleatorios y donde es útil que la misma secuencia se pueda reproducir fácilmente. Ejemplos populares de tales aplicaciones son las aplicaciones de simulación y modelado . Los PRNG no son adecuados para aplicaciones en las que es importante que los números sean realmente impredecibles, como el cifrado de datos y los juegos de azar.
Generador de números pseudoaleatorios usando srand()
CPP
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { srand(time(NULL)); int i; for(i = 0; i<5; i++) printf("%d\t", rand()%10); }
Python3
# Python3 code to implement the # approach import random from datetime import datetime # Passing the current time as the seed value random.seed(datetime.now()) for i in range(5): print(random.randint(0, 10), end="\t") # This code is contributed by phasing17
Javascript
// JavaScript code to implement the // approach for(var i = 0; i<5; i++) process.stdout.write(Math.floor(Math.random() * 10) + "\t"); // This code is contributed by phasing17
Salida 1:
3 7 0 9 8
Salida 2:
7 6 8 1 4
Explicación: srand() establece la semilla que utiliza rand() para generar números aleatorios. tiempo (NULO) devuelve no. de segundo desde el 1 de enero de 1971, es decir, cada vez que ejecutamos el programa tenemos una diferencia de unos pocos segundos que le da al programa una nueva semilla. Algoritmos PRNG ampliamente utilizados : generadores de Fibonacci retrasados , registros de desplazamiento de retroalimentación lineal , Blum Blum Shub . Cuestionario sobre números aleatorios Este artículo es una contribución de Yash Singla . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.orgo envíe su artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA