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
Lepaskan: 2024-12-07 16:44:14
asal
802 orang telah melayarinya

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
}
Salin selepas log masuk

Berikut ialah contoh yang menunjukkan penggunaan fungsi ini:

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

Output:

[[1 2 3] [2 1 3] [3 2 1] [2 3 1] [3 1 2] [1 3 2]]
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan