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
Libérer: 2024-12-03 19:05:14
original
500 Les gens l'ont consulté

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

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

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!

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