Heim >Java >javaLernprogramm >Wie kann ich das kartesische Produkt mehrerer Mengen in Java effizient berechnen?

Wie kann ich das kartesische Produkt mehrerer Mengen in Java effizient berechnen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-06 17:13:12911Durchsuche

How Can I Efficiently Compute the Cartesian Product of Multiple Sets in Java?

Effiziente kartesische Produktberechnung für mehrere Mengen

Das Ermitteln des kartesischen Produkts mehrerer Mengen kann eine nützliche Operation bei der Programmierung sein. Dabei wird ein neuer Satz generiert, der alle möglichen Kombinationen von Elementen aus den Eingabesätzen enthält. In Java gibt es einige Bibliotheken, die diese Aufgabe erleichtern können.

Rekursive Lösung für eine beliebige Anzahl von Mengen

Wenn jedoch die Anzahl der Mengen dynamisch variiert, a Eine rekursive Lösung kann implementiert werden:

public static Set<Set<Object>> cartesianProduct(Set<?>... sets) {
    if (sets.length < 2)
        throw new IllegalArgumentException("Product requires at least two sets (got " + sets.length + ")");

    return _cartesianProduct(0, sets);
}

private static Set<Set<Object>> _cartesianProduct(int index, Set<?>... sets) {
    Set<Set<Object>> ret = new HashSet<>();
    if (index == sets.length) {
        ret.add(new HashSet<>());
    } else {
        for (Object obj : sets[index]) {
            for (Set<Object> set : _cartesianProduct(index + 1, sets)) {
                set.add(obj);
                ret.add(set);
            }
        }
    }
    return ret;
}

Diese rekursive Funktion verwendet ein Array von Mengen als Eingabe und kombiniert Elemente iterativ aus jedem Satz, um das kartesische Produkt zu bilden. Beachten Sie, dass diese Lösung aufgrund der Einschränkungen von Java keine generischen Typinformationen beibehalten kann.

Das obige ist der detaillierte Inhalt vonWie kann ich das kartesische Produkt mehrerer Mengen in Java effizient berechnen?. 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