Heim  >  Artikel  >  Backend-Entwicklung  >  Wie generiert man eindeutige deterministische ganze Zahlen aus einer anderen ganzen Zahl?

Wie generiert man eindeutige deterministische ganze Zahlen aus einer anderen ganzen Zahl?

DDD
DDDOriginal
2024-11-21 06:15:09927Durchsuche

How to Generate Unique Deterministic Integers from Another Integer?

Eindeutige deterministische Ganzzahlen aus einer anderen Ganzzahl generieren

Bei der Suche nach einer deterministischen Zahlengenerierungsfunktion ist es unser Ziel, eine Funktion zu konstruieren, bei der jede Eingabezahl eine eindeutige Entsprechung generiert Zahl ohne Duplikate.

Modulare Arithmetik Lösung:

Die geniale Lösung liegt in der modularen Arithmetik, insbesondere der affinen Chiffre. Es verwendet die Transformationsformel:

f(P) = (mP + s) mod n

wobei:

  • n den Bereich der zulässigen Ganzzahlwerte darstellt (z. B. 2^64 für uint64)
  • s ist ein beliebiger Verschiebungswert kleiner als der Bereich
  • m ist eine Koprimzahl (keine gemeinsamen Faktoren) mit n

Für den uint64-Bereich wird ein nicht gerader Wert für m empfohlen, um eine Teilbarkeit durch 2 zu vermeiden.

Beispielimplementierung:

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

Diese Funktion stellt sicher, dass für alle möglichen uint64-Eingabewerte die generierten transformierten Werte vorhanden sind einzigartig.

Anpassung für vorzeichenbehaftete Ganzzahlen:

Für vorzeichenbehaftete Ganzzahlen (int64) bleibt der Ansatz ähnlich. Wir konvertieren Ein- und Ausgaben zwischen uint64 und int64, um eindeutige Zuordnungen beizubehalten:

func signedTransform(p int64) int64 {
    return int64(transform(uint64(p)))
}

Durch die Nutzung dieser deterministischen Funktion können Entwickler aus jeder gegebenen Eingabe-Ganzzahl eindeutige und reproduzierbare Zahlen generieren, was sie zu einem unschätzbar wertvollen Werkzeug für verschiedene Anwendungen macht .

Das obige ist der detaillierte Inhalt vonWie generiert man eindeutige deterministische ganze Zahlen aus einer anderen ganzen Zahl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn