Heim > Artikel > Backend-Entwicklung > Algorithmus zur Randomisierung der Ausgabereihenfolge kurzer Arrays in Go
Der PHP-Editor Xiaoxin bringt Ihnen einen Artikel über den Algorithmus zum Randomisieren der Ausgabereihenfolge kurzer Arrays in der Go-Sprache. In der Go-Sprache ist die Ausgabereihenfolge kurzer Arrays undefiniert, was auf die Parallelitätseigenschaften der Go-Sprache zurückzuführen ist. In diesem Artikel wird ein Algorithmus vorgestellt, der auf einem Zufallszahlengenerator basiert und die Ausgabereihenfolge kurzer Arrays randomisieren kann, sodass die Ausgabereihenfolge bei jeder Programmausführung unterschiedlich ist, wodurch die Flexibilität und Variabilität des Programms erhöht wird. Durch die Lektüre dieses Artikels können Leser erfahren, wie sie die Ausgabereihenfolge kurzer Arrays in der Go-Sprache randomisieren und auf ihre eigenen Projekte anwenden können.
Der Hauptunterschied zwischen dieser Frage und den zahlreichen doppelten Antworten besteht darin, dass das Eingabearray sehr kurz ist, nur 3 Elemente. --
Angenommen, ich habe einen bestellten Satz int
. Die Größe des Arrays beträgt nur 3 (oder mehr). Ich muss ihre Reihenfolge randomisieren und ein neues Array zurückgeben. Obwohl es sich um eine reine Algorithmusfrage handelt, ist die bevorzugte Antwortsprache go.
random.shuffle
. rand.shuffle
lauten. Aber hier ist mein Code:
https://go.dev/play/p/cvu8_q96-9f
func randshuffle(a []int) { rand.seed(time.now().unixnano()) rand.shuffle(len(a), func(i, j int) { a[i], a[j] = a[j], a[i] }) }
Hier sind die Ergebnisse eines meiner Testläufe:
[2 1 3] [1 3 2] [2 1 3] [2 1 3] [1 3 2] [1 2 3] [2 3 1]
Das scheint nicht sehr zufällig zu sein.
Irgendwelche guten Ideen für eine bessere Randomisierung für kurze Arrays mit drei Elementen?
Übrigens,
rand.shuffle
. Ja? Verschieben random.seed
von der Zufallsfunktion zur Hauptfunktion. Ein Prng kann nur einmal pro Programm gesät werden, und eine erfolgreiche Nachahmung der Zufälligkeit wird durch Zustandsübergänge des Generators und nicht durch den Samen erreicht. Führen Sie kein erneutes Seeding durch, es sei denn, Sie verstehen wirklich, wie PRNG funktioniert, und versuchen, den Prozess aus Gründen der Reproduzierbarkeit explizit zu steuern.
Die folgenden einfachen Änderungen am Code werden Ihren Anforderungen gerecht:
package main import ( "fmt" "math/rand" "time" ) func main() { rand.seed(time.now().unixnano()) a := []int{1, 2, 3} for i := 0; i < 10; i++ { randshuffle(a) fmt.println(a) } } func randshuffle(a []int) { rand.shuffle(len(a), func(i, j int) { a[i], a[j] = a[j], a[i] }) }
Dies führt zu folgendem Ergebnis:
[2 3 1] [3 1 2] [2 1 3] [2 3 1] [1 2 3] [1 3 2] [1 2 3] [3 1 2] [3 2 1] [2 3 1]
Das obige ist der detaillierte Inhalt vonAlgorithmus zur Randomisierung der Ausgabereihenfolge kurzer Arrays in Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!