首頁 >後端開發 >Golang >Go中如何有效率地產生清單的所有排列?

Go中如何有效率地產生清單的所有排列?

Susan Sarandon
Susan Sarandon原創
2024-12-07 16:44:14796瀏覽

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

在 Go 中產生所有排列:一種有效的方法

處理資料集時,通常需要產生元素清單的所有可能排列。 Go 提供了一個強大的程式設計環境,可以有效率地創建排列。

堆演算法是一種眾所周知的生成排列的方法。它透過交換元素對來建構前一個排列的每個排列。以下Heap 演算法的實作傳回數組的所有排列:

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
}

這是示範此函數用法的範例:

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

輸出:

[[1 2 3] [2 1 3] [3 2 1] [2 3 1] [3 1 2] [1 3 2]]

請注意,排列不是按字典順序排序的。若要實現排序排列,請考慮使用階乘系統產生它們,如有關排列的連結文件中所述。

在Go 中產生排列的其他資源包括:

  • [綜合指南關於排列產生](https://www.section.io/engineering-education/go-generate -all-permutations-of-a-list/)
  • [Go 在GitHub 上的實作](https://github .com/senghoo/golang-permutations)
  • [Python 的itertools.permutations() 等效項去](https://stackoverflow.com/questions/9179817/permutations-in-go)

以上是Go中如何有效率地產生清單的所有排列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn