¿Qué algoritmo puedo usar para generar enteros (pseudo) aleatorios con una duración de ciclo infinito?

No puedes O, más bien, no puedes en ningún sentido útil.

Los generadores de números pseudoaleatorios son básicamente máquinas de estados grandes que son lo suficientemente complicadas como para que las conexiones entre estados parezcan aleatorias. En otras palabras, la función podría reemplazarse con una lista de “si el último estado (s) es / son X, el siguiente estado es Y”.

En general, la complejidad se crea mediante el uso de una función de módulo o algo análogo a ella. Esto “envuelve” los valores en un área relativamente pequeña, haciendo que las conexiones entre los valores sean más difíciles de ver al eliminar la información, la escala.

Entonces, para un número de cierto tamaño (digamos, 64 bits) y un número dado de estados anteriores utilizados para calcular el siguiente estado, siempre habrá una duración máxima del ciclo, porque hay un número fijo de estados “actuales” y un número fijo de estados “siguientes”. Podría eliminar el módulo, por supuesto, y dejar que los números crezcan sin límites. Sin embargo, hacerlo hace que los números sean obviamente no aleatorios, ya que crecerían constantemente y no se perdería información.

No hay magia aquí. Finalmente, cada generador vuelve a un estado de entrada anterior, y esa es la duración de su ciclo.

Si desea generar enteros pseudoaleatorios con una duración de ciclo infinita, deberá asegurarse de que el estado interno de su generador de números pseudoaleatorios (PRNG) pueda crecer infinitamente. Si hay un límite finito en el tamaño del estado interno, eventualmente verá el mismo estado interno dos veces, y eso significa que está haciendo un bucle.

El problema de tener un estado interno grande es que tenderá a hacer que su PRNG sea más lento a medida que lo use. También terminarás usando más memoria con el tiempo. Su PRNG puede convertirse en un gran cuello de botella de recursos. Esto no será algo práctico de usar. Probablemente también terminará con una aleatoriedad simulada peor que si solo usara un PRNG estándar y no se preocupara por la duración del ciclo.

More Interesting

¿Cuál es la forma correcta de fusionar dos algoritmos de cifrado simples, sin causar un problema de cifrado?

¿Cómo afecta el subprocesamiento múltiple al rendimiento de diferentes algoritmos de clasificación?

¿Cuánto tiempo te lleva programar un algoritmo razonablemente complicado?

¿Qué es un objeto de matriz de vértices en OpenGL?

¿Qué temas de geometría y álgebra son importantes para concursos de programación como ICPC?

¿Es suficiente el conocimiento del tamiz de Eratóstenes y la factorización prima al preparar los concursos de programación?

¿Es posible encontrar la distancia del vértice más alejada del vértice inicial mediante la solución iterativa de DFS para un árbol (NO un gráfico genérico)?

Cómo generar una lista de todas las permutaciones de una matriz 4 × 4 con solo los números 1, 2, 3 y 4 en Python

¿Qué es un árbol binario?

¿Cuáles son los 5 mejores algoritmos con los que debería estar familiarizado para tener éxito en una entrevista de desarrollador junior?

¿Aprender la construcción del compilador mejora la habilidad / visión de resolución de problemas de programación? ¿Si es así, cómo? ¿O por qué no?

Algunos dicen que después de haber trabajado como desarrollador durante 2 años más o menos, debería poder pasar a un nuevo trabajo sin preguntas de algoritmos, ¿verdad?

Cómo enmarcar mi idea de algoritmo para que alguien que escribe algoritmos pueda entenderlo

¿Cuál es la diferencia entre trazado de rayos y fundición de rayos?

¿Existe un método o algoritmo matemático para expresar la suma de un número y un número multiplicado por un radical como la fórmula (a + b) ^ 3?