Maison >développement back-end >Golang >Comment puis-je générer efficacement toutes les permutations d'une liste dans Go ?
Lorsque l'on traite des ensembles de données, il est souvent nécessaire de générer toutes les permutations possibles d'une liste d'éléments. Go fournit un environnement de programmation robuste qui permet la création efficace de permutations.
L'algorithme de Heap est une méthode bien connue pour générer des permutations. Il construit chaque permutation à partir de la précédente en échangeant des paires d'éléments. L'implémentation suivante de l'algorithme de Heap renvoie toutes les permutations d'un tableau :
func permutations(arr []int) [][]int { var helper func([]int, int) res := [][]int{} helper = func(arr []int, n int) { if n == 1 { tmp := make([]int, len(arr)) copy(tmp, arr) res = append(res, tmp) } else { for i := 0; i < n; i++ { helper(arr, n-1) if n%2 == 1 { tmp := arr[i] arr[i] = arr[n-1] arr[n-1] = tmp } else { tmp := arr[0] arr[0] = arr[n-1] arr[n-1] = tmp } } } } helper(arr, len(arr)) return res }
Voici un exemple illustrant l'utilisation de cette fonction :
arr := []int{1, 2, 3} fmt.Println(permutations(arr))
Sortie :
[[1 2 3] [2 1 3] [3 2 1] [2 3 1] [3 1 2] [1 3 2]]
Veuillez noter que les permutations ne sont pas triées lexicographiquement. Pour obtenir des permutations triées, envisagez de les générer à l'aide d'un système de numération factorielle, comme décrit dans la documentation liée sur les permutations.
D'autres ressources pour générer des permutations dans Go incluent :
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!