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

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-06 17:13:12919parcourir

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

Calcul efficace du produit cartésien pour plusieurs ensembles

L'obtention du produit cartésien de plusieurs ensembles peut être une opération utile en programmation. Cela implique de générer un nouvel ensemble contenant toutes les combinaisons possibles d’éléments à partir des ensembles d’entrée. En Java, il existe quelques bibliothèques qui peuvent faciliter cette tâche.

Solution récursive pour un nombre arbitraire d'ensembles

Cependant, si le nombre d'ensembles varie dynamiquement, un une solution récursive peut être implémentée :

public static Set<Set<Object>> cartesianProduct(Set<?>... sets) {
    if (sets.length < 2)
        throw new IllegalArgumentException("Product requires at least 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;
}

Cette fonction récursive prend un tableau d'ensembles en entrée et combine de manière itérative des éléments de chaque ensemble pour former le produit cartésien. Notez que cette solution ne peut pas conserver les informations de type générique en raison des limitations de Java.

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