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 중국어 웹사이트의 기타 관련 기사를 참조하세요!