Rumah >Java >javaTutorial >Bagaimana untuk Mengira Produk Cartesan Berbilang Set dengan Cekap di Jawa?

Bagaimana untuk Mengira Produk Cartesan Berbilang Set dengan Cekap di Jawa?

Linda Hamilton
Linda Hamiltonasal
2024-12-06 07:27:10563semak imbas

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

Mengkomputerkan Hasil Cartesan Berbilang Set di Jawa

Di Jawa, mengira hasil Cartesan dua atau lebih set ialah operasi biasa. Ini melibatkan penjanaan set baharu yang mengandungi semua kemungkinan gabungan elemen daripada set input.

Penyelesaian Rekursif

Pendekatan tradisional menggunakan gelung bersarang boleh menjadi menyusahkan apabila berurusan dengan bilangan set yang sewenang-wenangnya. Sebaliknya, pertimbangkan pendekatan rekursif:

public static Set<Set<Object>> cartesianProduct(Set<?>... sets) {
    if (sets.length < 2)
        throw new IllegalArgumentException("Can't have a product of fewer than 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;
}

Pertimbangan

Perhatikan bahawa pelaksanaan rekursif ini kehilangan maklumat jenis generik disebabkan oleh pengehadan dalam sistem parameter generik Java. Untuk mengekalkan maklumat jenis, pertimbangkan untuk menentukan kelas tuple tertentu untuk bilangan set yang terlibat, seperti Triple untuk tiga set. Walau bagaimanapun, pendekatan ini tidak praktikal untuk bilangan set yang sembarangan.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Produk Cartesan Berbilang Set dengan Cekap di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn