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
Libérer: 2024-12-06 17:13:12
original
934 Les gens l'ont consulté

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal