J'ai besoin d'un bon générateur de nombres pseudo-aléatoires qui peut être calculé comme une fonction pure à partir de sa sortie précédente sans cacher d'état. Sous « bonne » Je veux dire:Y a-t-il de "bonnes" valeurs de génération PRNG sans état caché?
Je dois être en mesure de paramètrer générateur de telle sorte qu'il en cours d'exécution pour
2^n
itérations avec tous les paramètres (ou avec une grande partie d'entre eux) devrait couvrir la totalité ou la quasi-totalité des valeurs entre0
et2^n - 1
, oùn
est le nombre de bits dans la valeur de sortie.sortie du générateur combiné de
n + p
de bits doit couvrir la totalité ou la quasi-totalité des valeurs comprises entre0
et2^(n + p) - 1
si je l'exécuter pour2^n
itérations pour toutes les combinaisons possibles de ses paramètres, oùp
est le nombre de bits dans les paramètres.
Par exemple, LCG peut être calculé comme une fonction pure et il peut répondre à la première condition, mais il ne peut pas répondre à une seconde. Disons, nous avons LCG 32 bits, m = 2^32
et il est constant, notre p = 64
(deux paramètres 32 bits a
et c
), n + p = 96
, donc nous devons jeter un coup d'oeil sur les données par trois ints de sortie pour répondre à la deuxième condition. Malheureusement, la condition ne peut pas être satisfaite à cause d'une séquence strictement alternée d'impairs et d'impairs en sortie. Pour surmonter cela, l'état caché doit être introduit, mais cela rend la fonction non pure et brise la première condition (longue période cachée).
EDIT: à proprement parler, je veux la famille des fonctions paramétrées par p
bits, et avec la manière l'état complet de n
bits générant chacun toutes les chaînes binaires possibles de p + n
bits uniques « randomish », non seulement incrémenter en continu (p + n)
- bit int. Paramétrisation nécessaire pour sélectionner cette façon unique.
Est-ce que je veux trop?
Vous voulez qu'un générateur de nombres aléatoires génère une séquence presque distincte? –
@Moron, oui. Le générateur devrait être capable de générer toutes ou presque toutes les séquences de bits distinctes possibles de longueur prédéfinie L en plusieurs passages avec des paramètres différents ne faisant pas plus de 2^n itérations pour chaque cycle, où n
actual
Si vous attendez k nombres distincts dans k appels, ce n'est pas aléatoire du tout. Par exemple Je peux toujours prédire le dernier! Ou ai-je mal compris? –