Heim >Backend-Entwicklung >Golang >Wie generiert man deterministische und eindeutige ganze Zahlen aus Eingabezahlen?

Wie generiert man deterministische und eindeutige ganze Zahlen aus Eingabezahlen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-23 08:38:50901Durchsuche

How to Generate Deterministic and Unique Integers from Input Numbers?

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:

  • P ist die Eingabezahl
  • m ist eine nicht gerade Zahl Koprimzahl mit n
  • s ist eine Zufallszahl kleiner als n
  • n ist der zu generierende Wertebereich (z. B. 2^64 für uint64)

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!

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