Heim > Backend-Entwicklung > Golang > Wie kann ich alle Permutationen einer Liste in Go effizient generieren?

Wie kann ich alle Permutationen einer Liste in Go effizient generieren?

Susan Sarandon
Freigeben: 2024-12-07 16:44:14
Original
802 Leute haben es durchsucht

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

Generieren aller Permutationen in Go: Ein effizienter Ansatz

Beim Umgang mit Datensätzen ist es oft notwendig, alle möglichen Permutationen einer Liste von Elementen zu generieren. Go bietet eine robuste Programmierumgebung, die die effiziente Erstellung von Permutationen ermöglicht.

Der Heap-Algorithmus ist eine bekannte Methode zur Generierung von Permutationen. Es konstruiert jede Permutation aus der vorherigen, indem es Elementpaare vertauscht. Die folgende Implementierung des Heap-Algorithmus gibt alle Permutationen eines Arrays zurück:

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
}
Nach dem Login kopieren

Hier ist ein Beispiel, das die Verwendung dieser Funktion demonstriert:

arr := []int{1, 2, 3}
fmt.Println(permutations(arr))
Nach dem Login kopieren

Ausgabe:

[[1 2 3] [2 1 3] [3 2 1] [2 3 1] [3 1 2] [1 3 2]]
Nach dem Login kopieren

Bitte beachten Sie, dass die Permutationen nicht lexikographisch sortiert sind. Um sortierte Permutationen zu erhalten, sollten Sie erwägen, sie mithilfe eines faktoriellen Zahlensystems zu generieren, wie in der verlinkten Dokumentation zu Permutationen beschrieben.

Weitere Ressourcen zum Generieren von Permutationen in Go sind:

  • [Umfassende Anleitung auf Permutation Generation](https://www.section.io/engineering-education/go-generate-all-permutations-of-a-list/)
  • [Go-Implementierung auf GitHub](https://github .com/senghoo/golang-permutations)
  • [Pythons itertools.permutations()-Äquivalent in Los](https://stackoverflow.com/questions/9179817/permutations-in-go)

Das obige ist der detaillierte Inhalt vonWie kann ich alle Permutationen einer Liste in Go effizient generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage