>Java >java지도 시간 >Java에서 여러 세트의 데카르트 곱을 효율적으로 계산하는 방법은 무엇입니까?

Java에서 여러 세트의 데카르트 곱을 효율적으로 계산하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-06 07:27:10533검색

How to Efficiently Compute the Cartesian Product of Multiple Sets in Java?

Java에서 여러 집합의 데카르트 곱 계산

Java에서는 두 개 이상의 집합의 데카르트 곱을 계산하는 것이 일반적인 작업입니다. 여기에는 입력 세트에서 가능한 모든 요소 조합을 포함하는 새 세트를 생성하는 작업이 포함됩니다.

재귀 솔루션

중첩 루프를 사용하는 기존 접근 방식은 임의 개수의 세트를 처리할 때 번거로울 수 있습니다. 대신 재귀적 접근 방식을 고려하세요.

public static Set<Set<Object>> cartesianProduct(Set<?>... sets) {
    if (sets.length < 2)
        throw new IllegalArgumentException("Can't have a product of fewer than two sets (got " + sets.length + ")");

    return _cartesianProduct(0, sets);
}

private static Set<Set<Object>> _cartesianProduct(int index, Set<?>... sets) {
    Set<Set<Object>> ret = new HashSet<>();
    if (index == sets.length) {
        ret.add(new HashSet<>());
    } else {
        for (Object obj : sets[index]) {
            for (Set<Object> set : _cartesianProduct(index + 1, sets)) {
                set.add(obj);
                ret.add(set);
            }
        }
    }
    return ret;
}

고려 사항

이 재귀적 구현은 Java의 일반 매개변수 시스템의 제한으로 인해 일반 유형 정보를 잃습니다. 유형 정보를 보존하려면 Triple와 같이 관련된 세트 수에 대해 특정 튜플 클래스를 정의하는 것을 고려하십시오. 3세트용. 그러나 이 접근 방식은 임의의 세트 수에 대해서는 실용적이지 않습니다.

위 내용은 Java에서 여러 세트의 데카르트 곱을 효율적으로 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.