Heim >Java >javaLernprogramm >Wie generiert man effizient die Potenzmenge einer Menge in Java?

Wie generiert man effizient die Potenzmenge einer Menge in Java?

Linda Hamilton
Linda HamiltonOriginal
2024-12-14 22:41:14253Durchsuche

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

Generieren der Potenzmenge einer Menge in Java

Die Potenzmenge einer Menge ist die Menge aller Teilmengen dieser Menge. Die Potenzmenge von {1, 2, 3} lautet beispielsweise:

{{}, {2}, {3}, {2, 3}, {1, 2}, {1, 3} , {1, 2, 3}, {1}}

Angenommen, wir haben ein Set in Java:

Set<Integer> mySet = new HashSet<Integer>();
mySet.add(1);
mySet.add(2);
mySet.add(3);
Set<Set<Integer>> powerSet = getPowerset(mySet);

Wie können wir das schreiben? getPowerset-Funktion mit der optimalen Zeitkomplexität?

Lösung

Die Zeitkomplexität der Powerset-Funktion ist O(2^n), wobei n die Anzahl der Elemente in ist das Set. Dies liegt daran, dass die Potenzmenge einer Menge mit n Elementen 2^n Teilmengen enthält.

Hier ist eine funktionierende Implementierung der getPowerset-Funktion unter Verwendung von Generika und Mengen:

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

Test

Testen wir die getPowerset-Funktion anhand des angegebenen Beispiels Eingabe:

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

Dadurch wird die folgende Ausgabe gedruckt:

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

Das obige ist der detaillierte Inhalt vonWie generiert man effizient die Potenzmenge einer Menge in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn