Maison > développement back-end > Golang > Comment générer des entiers déterministes et uniques à partir de nombres d'entrée ?

Comment générer des entiers déterministes et uniques à partir de nombres d'entrée ?

Barbara Streisand
Libérer: 2024-11-23 08:38:50
original
928 Les gens l'ont consulté

How to Generate Deterministic and Unique Integers from Input Numbers?

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
Copier après la connexion

où :

  • P est le nombre d'entrée
  • m est un nombre impair le nombre premier avec n
  • s est un nombre aléatoire inférieur à n
  • n est la plage de valeurs à générer (par exemple, 2^64 pour uint64)

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
}
Copier après la connexion

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)))
}
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal