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
Freigeben: 2024-12-14 22:41:14
Original
252 Leute haben es durchsucht

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

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

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

Dadurch wird die folgende Ausgabe gedruckt:

[]
[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 einer Menge in Java?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage