Salvo equipo especializado que realmente puede muestrear un proceso aleatorio (por ejemplo, descomposición de partículas), que es lo que creo que quiere decir cuando dice “sin el uso de un generador de números aleatorios”, lo que está buscando es un generador de números pseudoaleatorios ( PRNG).
¿Por qué un algoritmo PRNG y no otro tipo de algoritmo de generación de secuencia? Porque está pidiendo algo que haga que las relaciones entre los números en la secuencia sean extremadamente difíciles de determinar. En otras palabras, debería verse lo más aleatorio posible sin ser realmente aleatorio, que es precisamente el objetivo de un PRNG.
Hay muchos algoritmos PRNG, pero el más utilizado es el Mersenne Twister.
- ¿Hay números irracionales de distribución uniforme no repetitivos para los cuales el dígito n puede calcularse en O (1) tiempo?
- ¿Qué estructuras de datos y algoritmos de programación heredados se enseñan en la universidad pero que no se usan después de la academia? ¿Aún debemos aprenderlos?
- ¿Alguien puede ayudarme a resolver el problema SPOJ "Consulta en un árbol" (QTREE)?
- ¿Cuál es el algoritmo más preciso (sin usar un software) para predecir el número 21 basado en 20 números anteriores?
- ¿Algún consejo para estudiar la complejidad del espacio para programar entrevistas? ¿Cuáles son algunos buenos recursos para aprender sobre la complejidad del espacio?
Los buenos PRNG están diseñados para que, en la medida de lo posible sin una fuente de entropía verdadera, las secuencias que generan exhiban todas las características estadísticas de una secuencia de números verdaderamente aleatoria. Sin embargo, no importa cuán perfecto sea el PRNG, sin una verdadera fuente de entropía, su secuencia generada comenzará a repetirse en algún punto (aunque el período, es decir, la longitud de la secuencia antes de que el algoritmo comience a repetirse) puede ser arbitrariamente largo dependiendo del algoritmo usado).
Para garantizar que un PRNG no genere la misma secuencia de números aparentemente aleatorios cada vez que se usa, están diseñados para usar un valor o vector (es decir, un conjunto específico de múltiples valores diferentes) llamado “semilla”. El uso de una semilla diferente, para un PRNG correctamente diseñado, garantizará que se genere una secuencia muy diferente de números aparentemente aleatorios. Un enfoque común y simplista aquí es usar de alguna manera la fecha / hora actual hasta el milisegundo como valor inicial, de modo que obtenga secuencias totalmente diferentes de números aleatorios de manera efectiva cada vez que use el PRNG.
Además, si el PRNG se usará en métodos criptográficos o de simulación de Monte-Carlo, debería ser extremadamente difícil predecir la secuencia de números que se generará sin conocer el valor semilla / vector. Por lo tanto, debería, por extensión, ser extremadamente difícil derivar los valores semilla simplemente conociendo una secuencia de números generados por el PRNG incluso cuando conozca el algoritmo .
Una respuesta concreta a su pregunta, entonces: a menos que sus conocidos sean criptógrafos o estén familiarizados con las herramientas y técnicas de criptoanálisis, el algoritmo Mersenne Twister debería ser más que adecuado.
Si las personas a las que intenta engañar son criptoanalistas, entonces use un PRNG criptográficamente seguro.