Maison >Java >javaDidacticiel >Comment puis-je calculer efficacement le Powerset d'un ensemble en Java ?

Comment puis-je calculer efficacement le Powerset d'un ensemble en Java ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-03 19:05:14441parcourir

How Can I Efficiently Calculate the Powerset of a Set in Java?

Comprendre le Powerset en Java

Le Powerset d'un ensemble représente tous les sous-ensembles possibles de ses éléments, y compris l'ensemble vide et l'ensemble d'origine lui-même. Pour un ensemble contenant n éléments, son ensemble de puissances est constitué de 2^n sous-ensembles uniques.

Obtenir le Powerset efficacement

En Java, on peut définir une fonction getPowerset qui calcule l'ensemble des puissances d'un ensemble donné. La complexité temporelle optimale pour cette opération est O(2^n), où n est le nombre d'éléments dans l'ensemble d'entrée.

Implémentation utilisant les génériques et la récursion

L'implémentation suivante exploite les génériques pour fonctionner avec des ensembles de tout type :

public static <T> Set<Set<T>> powerSet(Set<T> originalSet) {
    Set<Set<T>> sets = new HashSet<>();
    if (originalSet.isEmpty()) {
        sets.add(new HashSet<>());
        return sets;
    }
    List<T> list = new ArrayList<>(originalSet);
    T head = list.get(0);
    Set<T> rest = new HashSet<>(list.subList(1, list.size()));
    for (Set<T> set : powerSet(rest)) {
        Set<T> newSet = new HashSet<>();
        newSet.add(head);
        newSet.addAll(set);
        sets.add(newSet);
        sets.add(set);
    }
    return sets;
}

Utilisation et Exemple

Pour utiliser cette fonction, instanciez un ensemble et transmettez-le comme argument à getPowerset. Par exemple, avec votre exemple d'entrée :

Set<Integer> mySet = new HashSet<>();
mySet.add(1);
mySet.add(2);
mySet.add(3);
for (Set<Integer> s : powerSet(mySet)) {
    System.out.println(s);
}

Cela imprimera l'ensemble de puissances de l'ensemble donné dans le format attendu.

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