Deterministische und eindeutige Zahlengenerierung
Angesichts der Notwendigkeit, deterministische Ganzzahlen zu generieren, die jeder Eingabezahl eindeutig zugeordnet werden können, mag dies wie eine unmögliche Lösung erscheinen . Es gibt jedoch eine mathematische Formel, die diese Anforderung erfüllen kann.
Transformationsformel
Die Transformationsformel ist aus der modularen Arithmetik abgeleitet:
f(P) = (mP + s) mod n
wobei:
Diese Formel stellt sicher, dass jede Eingabe P einer eindeutigen Ausgabe im Bereich 0 bis n-1 zugeordnet wird. Die Koprimalitätsbedingung für m verhindert gemeinsame Faktoren zwischen m und n und eliminiert periodische Muster und Kollisionen.
Implementierungsbeispiel für uint64
Für einen uint64-Bereich die folgenden Parameterwerte kann verwendet werden:
var ( m = uint64(39293) s = uint64(75321908) ) func transform(p uint64) uint64 { return p*m + s }
Erweiterung zu int64
Für vorzeichenbehaftete Zahlen (int64) kann ein ähnlicher Ansatz verwendet werden. Die ursprüngliche Transformation für uint64 wird nach der Konvertierung der Eingabe und Ausgabe in und von uint64 angewendet:
func signedTransform(p int64) int64 { return int64(transform(uint64(p))) }
Durch die Verwendung dieses deterministischen und eindeutigen Zahlengenerierungsschemas wird es möglich, Eingabezahlen eindeutigen Ausgaben zuzuordnen, ohne dass eine erforderlich ist Array- oder speicherintensive Sortierung.
Das obige ist der detaillierte Inhalt vonWie generiert man deterministische und eindeutige ganze Zahlen aus Eingabezahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!