Maison > développement back-end > Golang > Comment générer des entiers déterministes uniques à partir d'un autre entier ?

Comment générer des entiers déterministes uniques à partir d'un autre entier ?

DDD
Libérer: 2024-11-21 06:15:09
original
980 Les gens l'ont consulté

How to Generate Unique Deterministic Integers from Another Integer?

Génération d'entiers déterministes uniques à partir d'un autre entier

Dans la quête pour créer une fonction de génération de nombres déterministes, notre objectif est de construire une fonction où chaque nombre d'entrée génère un correspondant unique numéro sans aucun doublon.

Solution arithmétique modulaire :

La solution ingénieuse réside dans l'arithmétique modulaire, en particulier le chiffre Affine. Il utilise la formule de transformation :

f(P) = (mP + s) mod n
Copier après la connexion

où :

  • n représente la plage des valeurs entières autorisées (par exemple, 2^64 pour uint64)
  • s est une valeur de décalage arbitraire inférieure à la plage
  • m est premier (pas de facteurs communs) avec n

Pour la plage uint64, une valeur non paire pour m est suggérée pour éviter la divisibilité par 2.

Exemple d'implémentation :

import (
    "fmt"
)

func main() {
    m := uint64(39293)
    s := uint64(75321908)

    transform := func(p uint64) uint64 {
        return p * m + s
    }

    testValues := []uint64{1, 2, 3, 4, 5}
    for _, v := range testValues {
        fmt.Printf("%v -> %v\n", v, transform(v))
    }
}
Copier après la connexion

Cette fonction garantit que pour toutes les valeurs d'entrée uint64 possibles, les valeurs transformées générées sont uniques.

Adaptation pour les entiers signés :

Pour les entiers signés (int64), l'approche reste similaire. Nous convertissons les entrées et les sorties entre uint64 et int64 pour conserver des mappages uniques :

func signedTransform(p int64) int64 {
    return int64(transform(uint64(p)))
}
Copier après la connexion

En utilisant cette fonction déterministe, les développeurs peuvent générer des nombres uniques et reproductibles à partir de n'importe quel entier d'entrée donné, ce qui en fait un outil inestimable pour diverses applications. .

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal