Wie generiert man deterministische und eindeutige ganze Zahlen aus Eingabezahlen?

Barbara Streisand
Freigeben: 2024-11-23 08:38:50
Original
818 Leute haben es durchsucht

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
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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)))
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage