Maison >développement back-end >Golang >Comment générer des entiers déterministes et uniques à partir de nombres d'entrée ?
Génération de nombres déterministes et uniques
Étant donné la nécessité de générer des entiers déterministes qui correspondent de manière unique à chaque nombre d'entrée, cela peut sembler impossibleЗадача . Cependant, il existe une formule mathématique qui peut remplir cette exigence.
Formule de transformation
La formule de transformation est dérivée de l'arithmétique modulaire :
f(P) = (mP + s) mod n
où :
Cette formule garantit que chaque entrée P correspond à une sortie unique comprise entre 0 et n-1. La condition de coprimalité pour m empêche les facteurs communs entre m et n, éliminant ainsi les modèles périodiques et les collisions.
Exemple d'implémentation pour uint64
Pour une plage uint64, les valeurs de paramètres suivantes peut être utilisé :
var ( m = uint64(39293) s = uint64(75321908) ) func transform(p uint64) uint64 { return p*m + s }
Extension à int64
Pour les nombres signés (int64), une approche similaire peut être utilisée. La transformation originale pour uint64 est appliquée après la conversion de l'entrée et de la sortie vers et depuis uint64 :
func signedTransform(p int64) int64 { return int64(transform(uint64(p))) }
En utilisant ce schéma de génération de nombres déterministe et unique, il devient possible de mapper les nombres d'entrée à des sorties uniques sans nécessiter un tableau ou tri gourmand en mémoire.
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!