Deseo generar números/permutaciones psuedo-aleatorios que 'ocupen' un período completo o un ciclo completo dentro de un rango. Por lo general, un 'Linear congruential Generador' (LCG) se puede utilizar para generar tales secuencias, utilizando una fórmula como:Generando números aleatorios o permutaciones de período completo/ciclo completo Similar a LCG pero sin impar/par
X = (a*Xs+c) Mod R
Donde X es la semilla, X es el resultado, a y c son constantes relativamente primos y R es el máximo (rango).
(Por período completo/ciclo completo, quiero decir que las constantes se pueden elegir para que cualquier X ocurra solo una vez en alguna secuencia aleatoria/permutada y estará dentro del rango de 0 a R-1 o 1 a R)
LCG casi cumple con todas mis necesidades. El problema que tengo con LCG es la no aleatoriedad del resultado impar/par, es decir: para una semilla Xn, el resultado X se alternará impar/par.
Preguntas:
¿Alguien sabe cómo crear algo similar que no alternativo par/impar?
Creo que se podría construir un 'Compuesto LCG' , pero no tengo detalles de . ¿Alguien puede dar un ejemplo de este CLCG?
¿Hay fórmulas alternativas que pueden cumplir con los detalles anteriores y restricciones a continuación?
Restricciones:
- quiero algo basado en una simple fórmula a base de semillas de . es decir: para obtener el siguiente número , proporciono la semilla y obtengo el siguiente 'número aleatorio' en la secuencia permutada. Específicamente, No puedo usar matrices precalculadas. (ver siguiente puntos)
- La secuencia absolutamente tiene que ser 'período completo/ciclo completo'
- El rango R podría ser de varios millones de o incluso de 32 bits/4 mil millones.
El cálculo no debe sufrir desbordamiento y ser eficiente/rápido, es decir: sin exponentes grandes o docenas de multiplicaciones/divisiones.
La secuencia no tiene que ser terriblemente aleatoria o segura: no necesito aleatoriedad criptográfica (pero puedo usarla si es viable), solo aleatoriedad "buena" o aleatoriedad aparente, sin secuencias impares/pares.
Cualquier pensamiento apreciado, gracias de antemano.
ACTUALIZACIÓN: Idealmente, la variable de rango puede no ser una potencia exacta de dos, pero debería funcionar en cualquier caso.
Una pregunta muy similar fue publicada ayer. Tal vez te pueda interesar. http://stackoverflow.com/questions/3572095/prng-with-adjustable-period/3575618#3575618 –
Sí, muy similar. Gracias por el enlace. – andora
¿Por qué has creado la recompensa? ¿Qué estás buscando que la solución de Peter G no proporciona? Si necesita algo más, debe especificarlo en alguna parte. – Fantius