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
Lepaskan: 2024-12-06 07:27:10
asal
546 orang telah melayarinya

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;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan