Generador de números pseudoaleatorios (PRNG)

Generador de números pseudoaleatorios (PRNG) se refiere a un algoritmo que usa fórmulas matemáticas para producir secuencias de números aleatorios. Los PNG generan una secuencia de números que se aproximan a las propiedades de los números aleatorios. Un PRNG parte de un estado inicial arbitrario usando 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. Así que están los números decisivo y eficaz.

¿Por qué necesitamos un PRNG?

Con la llegada de las computadoras, los programadores reconocieron la necesidad de un método 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 porque una computadora sigue ciegamente las instrucciones dadas y, por lo tanto, es completamente predecible. Los números aleatorios verdaderos no se pueden generar a partir de algo determinista como las computadoras, por lo que PRNG es una técnica desarrollada para generar números aleatorios usando una computadora.

¿Cómo funciona PNG?

Generador Apropiado Lineal Es el algoritmo más popular y antiguo para generar números aleatorios. 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 de alguna manera. La apariencia de aleatoriedad la proporciona el ejercicio. módulo aritmético..

Características de PRNG

  • Eficaz: PRNG puede producir muchos números en poco tiempo y es ventajoso para aplicaciones que requieren muchos números
  • decisivo: Una determinada secuencia de números se puede reproducir más tarde si se conoce el punto de partida 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á. Aunque la periodicidad no 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 PRNG

PRNG es adecuado para aplicaciones donde se requieren muchos números aleatorios y donde es útil poder reproducir fácilmente la misma secuencia. Ejemplos de tales aplicaciones son comunes aplicaciones de simulación y modelado. PRNG no es adecuado para aplicaciones donde es importante que los números sean realmente impredecibles, por ejemplo cifrado de datos y juegos.

Generador de números pseudoaleatorios usando hilo()

Tabla de contenidos

CPP



#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(NULL));
int i;
for(i = 0; i<5; i++)
printf("%dt", rand()%10);
}

Java



// Java code to implement the approach
import java.util.*;
class GFG {
  public static void main(String[] args)
  {
    // Initializing Random object with
    // the current time as seed value
    Random rand
      = new Random(System.currentTimeMillis());
    int i;
    for (i = 0; i < 5; i++)
      System.out.print(rand.nextInt(10) + "t");
  }
}
// This code is contributed by phasing17

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

C#



// C# code to implement the approach
using System;
class GFG {
    public static void Main(string[] args)
    {
        // Initializing Random object with
        // the current time as seed value
        Random rand = new Random(DateTime.Now.Day);
        int i;
        for (i = 0; i < 5; i++)
            Console.Write(rand.Next(10) + "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

Complejidad del tiempo: O(1)

Espacio Auxiliar: O(1)

Explicación: srand() establece la semilla utilizada por rand() para generar números aleatorios.tiempo (NULO) atrás no. del segundo de 1 de enero de 1971 es decir, cada vez que ejecutamos un programa tenemos una diferencia de unos segundos que le da al programa una nueva semilla. Los algoritmos PRNG son ampliamente utilizados : Generadores de Fibonacci disminuidos, programas de transferencia de retroalimentación lineal, Blum Blum Shub. Cuestionario de números aleatorios Este artículo ha sido agregado por Soltero. Si te gusta GeeksforGeeks y quieres contribuir, también puedes escribir un artículo usándolo. escribir.geeksforgeeks.org o envíe su artículo por correo a review-team@geeksforgeeks.org. Vea su artículo destacado en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba un comentario si encuentra algún problema o si desea compartir más información sobre el tema tratado anteriormente.

Mis notas personales
flecha_caer_arriba

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *