Maison >Java >javaDidacticiel >Comment calculer efficacement le produit cartésien de plusieurs ensembles en Java ?

Comment calculer efficacement le produit cartésien de plusieurs ensembles en Java ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-06 07:27:10541parcourir

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

Calcul du produit cartésien de plusieurs ensembles en Java

En Java, calculer le produit cartésien de deux ensembles ou plus est une opération courante. Cela implique de générer un nouvel ensemble contenant toutes les combinaisons possibles d'éléments des ensembles d'entrée.

Une solution récursive

Les approches traditionnelles utilisant des boucles imbriquées peuvent devenir lourdes lorsqu'il s'agit de traiter un nombre arbitraire d'ensembles. Envisagez plutôt une approche récursive :

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;
}

Considérations

Notez que cette implémentation récursive perd les informations de type générique en raison des limitations du système de paramètres génériques de Java. Pour conserver les informations de type, envisagez de définir une classe de tuple spécifique pour le nombre d'ensembles impliqués, telle que Triple pour trois séries. Cependant, cette approche n'est pas pratique pour un nombre arbitraire d'ensembles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn