Génération de nombres déterministes constants avec cartographie 1:1
Objectif
Générer une fonction déterministe qui mappe les nombres d'entrée à des nombres uniques afficher des nombres dans une plage spécifiée, sans duplication.
Méthode
Utiliser l'arithmétique modulaire basée sur le chiffre affine :
-
Formule de transformation : f( P) = (mP·s) mod n
-
Paramètres :
- m : Doit être premier avec n (non divisible par les mêmes nombres que n).
- s : un nombre aléatoire inférieur à n.
- n : la plage souhaitée du sortie.
Exemple pour uint64
- n = 2^64 (plage uint64)
- m = 39293 (un nombre impair)
- s = 75321908 (nombre aléatoire < 2^64)
Fonction de transformation :
1 2 3 | func transform(p uint64) uint64 {
return m * p + s
}
|
Copier après la connexion
Exemple avec int64
Pour les nombres signés, convertissez l'entrée et la sortie entre uint64 et int64 pour conserver le mappage unique :
1 2 3 | func signedTransform(p int64) int64 {
return int64(transform(uint64(p)))
}
|
Copier après la connexion
Garanties
- La fonction assure un mappage 1:1 pour tous les nombres saisis.
- Pas deux les numéros d'entrée généreront le même numéro de sortie.
- Les numéros de sortie seront uniformément répartis dans le nombre spécifié plage.
- La fonction est déterministe, générant toujours la même sortie pour une entrée donnée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!