¿Cuál es el mecanismo fundamental detrás de los generadores de números aleatorios?

Hay muchos mecanismos; la mayoría son pseudoaleatorios, ya que se basan en cálculos deterministas cuyas propiedades estadísticas son aceptables. La compensación entre rendimiento y “calidad” hace que los diferentes algoritmos sean útiles; algo rápido y “aleatorio” podría ser utilizable para una IA de juego, mientras que algo cuya seguridad se basa en una secuencia impredecible de números (por ejemplo, un pad de una sola vez) trabajará más duro.

Los PRNG de uso general típicos (p. Ej., Rand de libc) usan el enfoque “congruencial lineal”, donde el número aleatorio de n + 1 es un * mod M. previo, y M necesita satisfacer ciertas restricciones; ver http://en.wikipedia.org/wiki/Lin… y http://en.wikipedia.org/wiki/Pse…. Si realmente tiene curiosidad acerca de esto, el volumen de “Algoritmos Seminuméricos” de Knuth de The Art of Computer Programming tiene un tratamiento rico y desafiante.

También hay fuentes físicas de aleatoriedad; / dev / random en Linux usa el contador de marca de tiempo de sub nanosegundos entre eventos de entrada (movimientos del mouse, pulsaciones de teclas, llegadas de paquetes de red, …) como fuente de aleatoriedad física, y también existen dispositivos físicos que usan termodinámica para generar números aleatorios.

Para agregar a la respuesta de Keith Adams:

La respuesta depende de lo que se entiende por “aleatorio”.

(Pseudo) aleatoriedad en algunos contextos significa que la secuencia sobrevive a un aluvión de pruebas estadísticas ad hoc. Este es quizás el significado más “tradicional”, y muchos métodos, como el enfoque “lineal congruencial”, han sido diseñados para resistir pruebas estadísticas particulares (aunque a menudo fallan otros).

(Pseudo) aleatoriedad también ha llegado a significar que la secuencia es computacionalmente indistinguible de la “aleatoriedad verdadera”. Este es quizás el significado preferido en la teoría de la complejidad y la criptografía. El campo aún está bajo estudio activo, pero actualmente los “mecanismos fundamentales” podrían incluir gráficos expansores y funciones unidireccionales.
Salil Vadhan tiene algunas notas de conferencias publicadas en línea para su curso sobre este tema:
http://people.seas.harvard.edu/~

Una máquina completamente determinista no puede producir “aleatoriedad verdadera”, por lo que la aleatoriedad verdadera, si existe, debe provenir de algún aspecto fundamental del universo físico. Si acepta las interpretaciones predominantes de la mecánica cuántica, la verdadera aleatoriedad existe en la naturaleza y las medidas cuidadosamente diseñadas pueden potencialmente generar muestras verdaderamente aleatorias.

Los generadores de números aleatorios contienen algoritmos deterministas [1] diseñados para producir resultados que simulan un comportamiento no determinista
Motores centrales
El núcleo de cualquier software de generación de números pseudoaleatorios es una rutina para generar enteros aleatorios distribuidos uniformemente. Estos se utilizan luego en una especie de proceso de arranque para generar números reales distribuidos uniformemente. Los números reales uniformes se utilizan para generar a partir de otras distribuciones a través de transformaciones, algoritmos de aceptación-rechazo, etc. Todo comienza con esa fuente original de enteros aleatorios.
Establecer semillas
Cada motor tiene un método seed () que acepta un argumento largo sin signo para especificar la semilla de generación de números aleatorios. También es posible establecer la semilla con más detalle utilizando parámetros de plantilla únicos para cada motor.

  1. http://en.wikipedia.org/wiki/Ran

More Interesting

¿Por qué son importantes los números primos para la seguridad informática?

¿Cuándo se debe comenzar a resolver los problemas del Proyecto Euler en HackerRank? He resuelto alrededor de 50 en SPOJ, entonces, ¿es el momento adecuado para comenzar?

¿Cuál es la diferencia entre un tipo estable e inestable?

¿Cuál es la diferencia entre la descomposición de raíz cuadrada y el algoritmo de MO?

¿Cuál es el mejor algoritmo para realizar la extracción de características para el reconocimiento óptico de caracteres?

¿Por qué mi código JavaScript muestra un error de bucle infinito en la línea 7? ¿Por qué no está eliminando los elementos de la matriz de entrada?

En problemas de DP, ¿cómo sabe si usar una matriz / tabla 1D o una matriz / tabla 2D?

Programación competitiva: dado un polígono y tres cuadrados congruentes alineados con el eje, ¿puede determinar en tiempo polinómico si el polígono puede cubrirse por completo de manera que los tres cuadrados, que pueden superponerse, cubran una cantidad igual de área en el polígono?

¿Por qué está completo el problema de la mochila NP incluso cuando tiene complejidad O (nW)?

Cómo generar un número aleatorio en C

¿Cuáles son las formas de ajustar algoritmos de aprendizaje automático?

¿Cómo manejan las personas el error de profundidad de recursión máxima excedida sin reescribir el código de forma iterativa? (en la programación dinámica de arriba hacia abajo)

Cómo implementar el algoritmo

¿Qué es un algoritmo de hashing seguro?

¿Qué es un filtro de Kalman?