Maison > Java > javaDidacticiel > Comment générer efficacement le Power Set d'un ensemble Java ?

Comment générer efficacement le Power Set d'un ensemble Java ?

DDD
Libérer: 2024-12-02 18:48:11
original
693 Les gens l'ont consulté

How to Efficiently Generate the Power Set of a Java Set?

Obtention du Powerset d'un ensemble en Java avec une complexité optimale

Le Powerset d'un ensemble est la collection de tous les sous-ensembles de cet ensemble. Pour un ensemble de n éléments, l'ensemble de puissances contient 2^n sous-ensembles.

Considérons un ensemble Java :

Set<Integer> mySet = new HashSet<>();
mySet.add(1);
mySet.add(2);
mySet.add(3);
Copier après la connexion

Nous voulons écrire une fonction, getPowerset, pour générer l'ensemble de puissances de cet ensemble. La complexité idéale pour cette opération est O(2^n).

Une implémentation possible utilisant les génériques et les ensembles de Java est :

public static <T> Set<Set<T>> getPowerset(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 : getPowerset(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

Cette solution récursive parcourt les éléments de l'ensemble, les ajouter à chaque sous-ensemble et générer un nouveau sous-ensemble. Il maintient systématiquement l'ensemble des puissances des éléments restants.

Un test simple utilisant l'exemple d'entrée donne le résultat attendu :

for (Set<Integer> s : getPowerset(mySet)) {
    System.out.println(s);
}
Copier après la connexion

Sortie :

[]
[1]
[2]
[1, 2]
[3]
[1, 3]
[2, 3]
[1, 2, 3]
Copier après la connexion

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal