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.
- ¿Qué estructura de datos usa YouTube?
- ¿Qué es un algoritmo eficiente para encontrar un circuito euleriano en un gráfico no dirigido?
- Cómo saber el orden de magnitud de un algoritmo
- ¿Es posible verificar si un gráfico está conectado o no si sé el grado de cada vértice?
- ¿Qué alternativas hay para los algoritmos de escalada?