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
Libérer: 2024-12-07 16:44:14
original
801 Les gens l'ont consulté

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
}
Copier après la connexion

Voici un exemple illustrant l'utilisation de cette fonction :

arr := []int{1, 2, 3}
fmt.Println(permutations(arr))
Copier après la connexion

Sortie :

[[1 2 3] [2 1 3] [3 2 1] [2 3 1] [3 1 2] [1 3 2]]
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal