處理資料集時,通常需要產生元素清單的所有可能排列。 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 中產生排列的其他資源包括:
以上是Go中如何有效率地產生清單的所有排列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!