정수 슬라이스를 사용하여 Go에서 하위 집합 관계를 효율적으로 결정하려면 어떻게 해야 합니까?

DDD
풀어 주다: 2024-10-26 12:46:02
원래의
977명이 탐색했습니다.

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

Go에서 정수 슬라이스로 하위 집합 관계를 효율적으로 확인

한 슬라이스가 다른 슬라이스의 하위 집합인지 확인하는 것은 일반적인 계산 작업입니다. Go에는 이를 달성하기 위한 다양한 접근 방식이 있으며 다양한 수준의 효율성을 제공합니다.

한 가지 간단한 방법은 두 슬라이스의 요소를 반복하여 작은 슬라이스의 각 요소를 더 큰 슬라이스의 요소와 비교하는 것입니다. . 그러나 이 접근 방식은 검사의 반복 특성으로 인해 대형 슬라이스의 경우 계산 비용이 많이 들 수 있습니다.

더 높은 효율성을 달성하기 위해 맵 데이터 구조를 활용하는 대체 접근 방식이 있습니다. 이 접근 방식은 작은 슬라이스의 요소를 큰 슬라이스에서 빼서 요소가 남아 있는지 확인하는 차집합 속성을 활용합니다.

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}))
}
로그인 후 복사

이 구현에서는 더 큰 슬라이스의 요소와 해당 개수를 저장하는 데 맵이 사용됩니다. 더 작은 조각의 요소에 대한 반복에는 맵의 개수에 액세스하고 이를 감소시키는 작업이 포함됩니다. 더 작은 슬라이스에서 누락된 요소가 발견되거나(맵에서 찾을 수 없음) 개수가 0 아래로 떨어지면(더 작은 슬라이스보다 큰 슬라이스에 더 적은 요소가 있음을 나타냄) 함수는 false를 반환하여 더 작은 슬라이스가 없음을 나타냅니다. 하위 집합. 이 접근 방식의 시간 복잡도는 반복 접근 방식보다 훨씬 낮기 때문에 대규모 조각에 더 효율적입니다.

위 내용은 정수 슬라이스를 사용하여 Go에서 하위 집합 관계를 효율적으로 결정하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!