Heim > Artikel > Backend-Entwicklung > Wie generiert man eindeutige deterministische ganze Zahlen aus einer anderen ganzen Zahl?
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:
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!