Maison >développement back-end >Golang >Comment puis-je générer efficacement toutes les permutations d'une liste dans Go ?

Comment puis-je générer efficacement toutes les permutations d'une liste dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-07 16:44:14795parcourir

How Can I Efficiently Generate All Permutations of a List in Go?

Générer toutes les permutations en Go : une approche efficace

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 :

  • [Guide complet sur les permutations génération](https://www.section.io/engineering-education/go-generate-all-permutations-of-a-list/)
  • [Go mise en œuvre sur GitHub](https://github .com/senghoo/golang-permutations)
  • [L'équivalent itertools.permutations() de Python dans Allez](https://stackoverflow.com/questions/9179817/permutations-in-go)

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn