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
DDDoriginal
2024-11-21 06:15:09987parcourir

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

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

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

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!

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