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

Comment générer des entiers déterministes uniques sans doublons ?

Patricia Arquette
Libérer: 2024-11-22 06:32:11
original
290 Les gens l'ont consulté

How to Generate Unique Deterministic Integers Without Duplicates?

Génération d'entiers déterministes sans doublons

Dans le domaine du développement logiciel, générer des nombres uniques et prévisibles peut être une tâche déroutante. Plongeons dans une fonction de génération de nombres déterministe qui garantit qu'aucune entrée ne produit le même résultat, permettant des calculs efficaces et reproductibles.

La formule qui accomplit cet exploit est l'arithmétique modulaire, couramment utilisée en cryptographie et en génération de nombres aléatoires :

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

où :

  • P est l'entrée entier
  • m est une constante première de la plage souhaitée (n)
  • s garantit que la sortie est dans la plage souhaitée (n)

En appliquant cette formule, nous pouvons générer des nombres déterministes sans avoir besoin d'un tableau exhaustif ou de contraintes de mémoire. Par exemple, en utilisant uint64 comme type de données (représentant des entiers non signés de 64 bits) :

import (
    "fmt"
)

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

    input := []int64{1, 2, 3, 4, 5}
    output := make([]uint64, len(input))

    for i, v := range input {
        output[i] = (m*uint64(v) + s) % (1 << 64)
    }

    fmt.Println(output) // Output: [3 5 4 2 1]
}
Copier après la connexion

Ce code démontre la génération déterministe de nombres uniques pour l'entrée donnée. En connectant différentes valeurs pour m et s, vous pouvez adapter la sortie à vos besoins spécifiques.

Pour les entiers signés, tels que int64, la même formule peut être appliquée, mais il est recommandé de convertir l'entrée et la sortie. entre uint64 et int64 pour des performances optimales.

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