ホームページ >バックエンド開発 >Golang >Goでリストのすべての順列を生成するにはどうすればよいですか?

Goでリストのすべての順列を生成するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-05 15:20:10733ブラウズ

How to Generate All Permutations of a List in Go?

Go の順列: 詳細ガイド

この記事では、Go の要素のリストの可能なすべての順列を生成するさまざまな方法について説明します。

一般的な方法の 1 つは、前の順列から各順列を生成するヒープのアルゴリズムです。要素のペアを交換することによって。次の Go 関数は、このアルゴリズムを実装しています。

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))

順列を生成する別の方法は、階乗数体系を使用することです。この方法により、n 番目の辞書順列を迅速に生成できます。このメソッドの詳細については、上記の記事の「順列」セクションを参照してください。

これらのメソッドを実装すると、さまざまなアプリケーションで使用するために Go で簡単に順列を生成できます。

以上がGoでリストのすべての順列を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。