首頁 > 後端開發 > Golang > Heap演算法如何產生Go中的所有排列?

Heap演算法如何產生Go中的所有排列?

Susan Sarandon
發布: 2024-12-30 06:20:09
原創
893 人瀏覽過

How Can Heap's Algorithm Generate All Permutations in Go?

在Go 中產生所有排列

簡介

產生清單的所有可能排列元素清單的所有可能排列元素是程式設計中的常見問題。本文探討了 Heap 演算法,它是產生所有排列的最簡單方法之一。產生的排列不會依字典順序排序。

堆疊演算法

堆演算法透過選擇一對要交換的元素來產生每個排列。它從一種基本情況開始,其中數組只有一個元素。對於較大的數組,它會迭代元素,交換對以遞歸地產生新的排列。

Go 實作

以下是 Heap 演算法的 Go 實作:

func permutations(arr []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]]
登入後複製

額外的註釋

  • 排列已生成,但未按字典順序排序。
  • 對於字典排序,請考慮使用階乘數字系統來產生排列。

以上是Heap演算法如何產生Go中的所有排列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板