Maison  >  Article  >  développement back-end  >  Comment générer des nombres uniques et déterministes avec un mappage 1:1 ?

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

Barbara Streisand
Barbara Streisandoriginal
2024-11-17 18:30:03961parcourir

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
}

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)))
}

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!

Déclaration:
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