Maison > développement back-end > Golang > le corps du texte

Comment générer des nombres uniques et déterministes avec un mappage 1:1 ?

Barbara Streisand
Libérer: 2024-11-17 18:30:03
original
968 Les gens l'ont consulté

How to Generate Unique, Deterministic Numbers with a 1:1 Mapping?

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 :

  1. Formule de transformation : f( P) = (mP·s) mod n
  2. 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 :

func transform(p uint64) uint64 {
    return m * p + s  // implicitly mod'd 2^64 by the type's size
}
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 :

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!

source:php.cn
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