Maison > Article > développement back-end > Algorithme pour randomiser l'ordre de sortie des tableaux courts dans Go
L'éditeur PHP Xiaoxin vous propose un article sur l'algorithme de randomisation de l'ordre de sortie des tableaux courts en langage Go. Dans le langage Go, l'ordre de sortie des tableaux courts n'est pas défini, ce qui est dû aux caractéristiques de concurrence du langage Go. Cet article présentera un algorithme basé sur un générateur de nombres aléatoires, capable de randomiser l'ordre de sortie de tableaux courts, de sorte que l'ordre de sortie soit différent à chaque fois que le programme est exécuté, augmentant ainsi la flexibilité et la variabilité du programme. En lisant cet article, les lecteurs peuvent apprendre à randomiser l'ordre de sortie de tableaux courts dans le langage Go et à l'appliquer à leurs propres projets.
La principale différence entre cette question et les nombreuses réponses en double est que le tableau d'entrée est très court, seulement 3 éléments. --
Supposons que j'ai un ensemble commandé de int
. La taille du tableau n'est que de 3 (ou plus). Je dois randomiser leur ordre et renvoyer un nouveau tableau. Bien qu’il s’agisse d’une question purement algorithmique, le langage de réponse préféré est Go.
random.shuffle
. rand.shuffle
. Mais voici mon 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] }) }
Voici l'un des résultats de mon test :
[2 1 3] [1 3 2] [2 1 3] [2 1 3] [1 3 2] [1 2 3] [2 3 1]
Cela ne semble pas très aléatoire.
Avez-vous de bonnes idées pour une meilleure randomisation pour les tableaux courts à trois éléments ?
Au fait,
rand.shuffle
. Ouais? Déplacez random.seed
de la fonction aléatoire à la fonction principale. Un prng ne peut être généré qu'une seule fois par programme, et une imitation réussie du caractère aléatoire est obtenue grâce aux transitions d'état du générateur plutôt qu'à la graine. Ne réamorcez pas à moins que vous ne compreniez vraiment comment prng fonctionne et que vous essayiez de contrôler explicitement le processus pour des raisons telles que la reproductibilité.
Les simples modifications suivantes au code répondront à vos besoins :
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] }) }
Cela produira le résultat suivant :
[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]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!