Heim >Backend-Entwicklung >Golang >Wie generiert man deterministisch eindeutige ganze Zahlen aus Eingaben?
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:
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!