Heim >Backend-Entwicklung >Golang >Wie generiert man deterministisch eindeutige ganze Zahlen aus Eingaben?

Wie generiert man deterministisch eindeutige ganze Zahlen aus Eingaben?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-02 12:41:17934Durchsuche

How to Deterministically Generate Unique Integers from Inputs?

Deterministische Generierung eindeutiger Ganzzahlen aus Eingaben

Bei der Suche nach einer Lösung zur Generierung deterministischer Ganzzahlen, die Duplikate vermeidet, dreht sich die Frage darum, eine Transformation zu finden Methode, die Eingabezahlen eindeutigen Ausgaben innerhalb eines bestimmten Bereichs zuordnet, z. B. einem int64.

Die Antwort liegt in Anwendung modularer Arithmetik, abgeleitet von der affinen Chiffre:

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

wobei:

  • n = Bereich möglicher Ganzzahlen (z. B. 2^64 für int64)
  • s < n
  • m ist teilerfremd mit n (was bedeutet, dass sie keine anderen gemeinsamen Faktoren als 1 haben)

Durch die Auswahl geeigneter m und s garantiert diese Formel eine eindeutige Zuordnung der Eingabezahlen zu Gibt Ganzzahlen innerhalb des angegebenen Bereichs aus. Zum Beispiel für int64:

m = 39293 (any non-even number)
s = 75321908 (any random number below 2^64)

Mit diesen Werten stellt die Transformationsfunktion:

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

sicher, dass jede Eingabe-Ganzzahl eine eindeutige Ausgabe-Ganzzahl erzeugt, wie im folgenden Go-Playground gezeigt Beispiel:

https://go.dev/play/p/EKB6SH3-SGu

Für negative Zahlen gilt die Die Logik bleibt dieselbe. Wir können einfach Ein- und Ausgaben zwischen uint64 und int64 konvertieren, um die eindeutige Zuordnung beizubehalten:

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

Dieser Ansatz stellt sicher, dass alle möglichen Ganzzahlen innerhalb eines bestimmten Bereichs deterministisch und ohne Kollisionen auf unterschiedliche Ausgabe-Ganzzahlen abgebildet werden.

Das obige ist der detaillierte Inhalt vonWie generiert man deterministisch eindeutige ganze Zahlen aus Eingaben?. 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