Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menjana Semua Pilihatur Senarai dalam Go dengan Cekap?

Bagaimanakah Saya Boleh Menjana Semua Pilihatur Senarai dalam Go dengan Cekap?

Susan Sarandon
Susan Sarandonasal
2024-12-07 16:44:14798semak imbas

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

Menjana Semua Pilihatur dalam Go: Pendekatan yang Cekap

Apabila berurusan dengan set data, selalunya perlu menjana semua pilih atur yang mungkin bagi senarai elemen. Go menyediakan persekitaran pengaturcaraan teguh yang membolehkan penciptaan pilih atur yang cekap.

Algoritma Heap ialah kaedah yang terkenal untuk menjana pilih atur. Ia membina setiap pilih atur daripada yang sebelumnya dengan menukar pasangan elemen. Pelaksanaan algoritma Heap berikut mengembalikan semua pilih atur tatasusunan:

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
}

Berikut ialah contoh yang menunjukkan penggunaan fungsi ini:

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

Output:

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

Sila ambil perhatian bahawa pilih atur tidak disusun mengikut leksikografi. Untuk mencapai pilih atur yang diisih, pertimbangkan untuk menjananya menggunakan sistem nombor faktorial, seperti yang diterangkan dalam dokumentasi terpaut pada pilih atur.

Sumber lain untuk menjana pilih atur dalam Go termasuk:

  • [Panduan komprehensif pada pilih atur generasi](https://www.section.io/engineering-education/go-generate-all-permutations-of-a-list/)
  • [Go pelaksanaan pada GitHub](https://github .com/senghoo/golang-permutations)
  • [Python's itertools.permutations() setara dalam Pergi](https://stackoverflow.com/questions/9179817/permutations-in-go)

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Semua Pilihatur Senarai dalam Go dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn