Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Menentukan Perhubungan Subset dengan Cekap dalam Go Menggunakan Kepingan Integer?

Bagaimanakah Saya Boleh Menentukan Perhubungan Subset dengan Cekap dalam Go Menggunakan Kepingan Integer?

DDD
DDDasal
2024-10-26 12:46:02975semak imbas

How Can I Efficiently Determine Subset Relationships in Go Using Integer Slices?

Menyemak Perhubungan Subset dengan Cekap dengan Kepingan Integer dalam Go

Menentukan sama ada satu keping ialah subset yang lain ialah tugas pengiraan biasa. Dalam Go, terdapat pelbagai pendekatan untuk mencapai matlamat ini, menawarkan tahap kecekapan yang berbeza-beza.

Satu kaedah yang mudah ialah dengan mengulangi elemen kedua-dua kepingan, membandingkan setiap elemen dalam kepingan yang lebih kecil dengan elemen dalam kepingan yang lebih besar . Walau bagaimanapun, pendekatan ini boleh memakan kos pengiraan untuk kepingan besar disebabkan oleh sifat berulang semakan.

Terdapat pendekatan alternatif yang memanfaatkan struktur data peta untuk mencapai kecekapan yang lebih tinggi. Pendekatan ini memanfaatkan sifat perbezaan yang ditetapkan, di mana unsur-unsur kepingan yang lebih kecil ditolak daripada kepingan yang lebih besar untuk menentukan sama ada ada unsur yang kekal.

Berikut ialah cara untuk melaksanakan pendekatan ini dalam Go:

package main

import "fmt"

// subset returns true if the first array is completely
// contained in the second array. There must be at least
// the same number of duplicate values in second as there
// are in first.
func subset(first, second []int) bool {
    set := make(map[int]int)
    for _, value := range second {
        set[value] += 1
    }

    for _, value := range first {
        if count, found := set[value]; !found {
            return false
        } else if count < 1 {
            return false
        } else {
            set[value] = count - 1
        }
    }

    return true
}

func main() {
    fmt.Println(subset([]int{1, 2, 3}, []int{1, 2, 3, 4}))
    fmt.Println(subset([]int{1, 2, 2}, []int{1, 2, 3, 4}))
}

Dalam pelaksanaan ini, peta digunakan untuk menyimpan elemen kepingan yang lebih besar dan kiraan yang sepadan. Mengulangi elemen kepingan yang lebih kecil melibatkan mengakses kiraan dalam peta dan mengurangkannya. Jika elemen yang hilang ditemui dalam kepingan yang lebih kecil (tidak ditemui dalam peta) atau jika kiraan jatuh di bawah 0 (menunjukkan lebih sedikit elemen dalam kepingan yang lebih besar berbanding dengan yang lebih kecil), fungsi mengembalikan palsu, menunjukkan bahawa kepingan yang lebih kecil tidak subset. Kerumitan masa pendekatan ini jauh lebih rendah daripada pendekatan berulang, menjadikannya lebih cekap untuk kepingan besar.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Perhubungan Subset dengan Cekap dalam Go Menggunakan Kepingan Integer?. 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