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

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

Patricia Arquette
Patricia Arquetteoriginal
2024-11-30 04:21:15265parcourir

How to Efficiently Compute the Powerset of a Set in Java?

Calcul de Powerset pour les ensembles en Java

En informatique, l'ensemble de puissances d'un ensemble représente la collection de tous les sous-ensembles possibles de cet ensemble. Cet article explore comment construire l'ensemble de puissances d'un ensemble d'entiers en Java, en s'efforçant d'obtenir une complexité temporelle optimale.

Énoncé du problème

Étant donné un ensemble d'entiers définis en Java , notre objectif est de créer une fonction, getPowerset, qui calcule l'ensemble de puissances. Nous visons à atteindre la meilleure complexité temporelle possible pour cette fonction.

Solution

La complexité temporelle du calcul de l'ensemble de puissances est en effet O(2^n), où n est la taille de l'ensemble d'origine. La fonction ci-dessous utilise des génériques et des ensembles pour implémenter efficacement le calcul de l'ensemble de puissance :

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

Test

Le code suivant illustre la fonction avec un exemple d'entrée :

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

Sortie

La sortie du test, telle que fournie dans le question, affiche l'ensemble des puissances de {1, 2, 3} :

[]
[2]
[3]
[2, 3]
[1]
[1, 2]
[1, 3]
[1, 2, 3]

En implémentant la fonction getPowerset à l'aide de génériques et de récursivité, nous obtenons une complexité temporelle optimale de O(2^n) et une solution efficace pour calculer l'ensemble des puissances d'un ensemble en 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