Heim > Java > javaLernprogramm > Wie generiert man effizient die Potenzmenge eines Java-Sets?

Wie generiert man effizient die Potenzmenge eines Java-Sets?

DDD
Freigeben: 2024-12-02 18:48:11
Original
698 Leute haben es durchsucht

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

Erhalten der Potenzmenge einer Menge in Java mit optimaler Komplexität

Die Potenzmenge einer Menge ist die Sammlung aller Teilmengen dieser Menge. Für eine Menge mit n Elementen enthält die Powermenge 2^n Teilmengen.

Betrachten wir eine Java-Menge:

Set<Integer> mySet = new HashSet<>();
mySet.add(1);
mySet.add(2);
mySet.add(3);
Nach dem Login kopieren

Wir möchten eine Funktion, getPowerset, schreiben, um die Powermenge von zu generieren dieses Set. Die ideale Komplexität für diese Operation ist O(2^n).

Eine mögliche Implementierung unter Verwendung der Generika und Mengen von Java ist:

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;
}
Nach dem Login kopieren

Diese rekursive Lösung iteriert durch die Elemente der Menge, Hinzufügen zu jeder Teilmenge und Generieren einer neuen Teilmenge. Der Powerset der verbleibenden Elemente bleibt konstant erhalten.

Ein einfacher Test mit der Beispieleingabe liefert das erwartete Ergebnis:

for (Set<Integer> s : getPowerset(mySet)) {
    System.out.println(s);
}
Nach dem Login kopieren

Ausgabe:

[]
[1]
[2]
[1, 2]
[3]
[1, 3]
[2, 3]
[1, 2, 3]
Nach dem Login kopieren

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

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage