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

Bagaimana untuk Mengira Produk Cartesan Berbilang Set di Jawa?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-07 14:26:11882semak imbas

How to Calculate the Cartesian Product of Multiple Sets in Java?

Cartesian Product of Multiple Sets in Java

Menentukan hasil Cartesian dua atau lebih set ialah tugas biasa dalam pengaturcaraan. Begini cara untuk melaksanakan operasi ini menggunakan perpustakaan Java.

Pendekatan Rekursif

Untuk bilangan set yang sewenang-wenangnya, pendekatan rekursif boleh digunakan. Kaedah cartesianProduct menerima tatasusunan set sebagai hujah. Ia menyemak sama ada bilangan set adalah sah dan meneruskan dengan langkah berikut:

  1. Kes Asas: Jika bilangan set adalah satu, set kosong dikembalikan.
  2. Langkah Rekursif : Untuk setiap elemen dalam set semasa, ia secara rekursif memanggil dirinya sendiri untuk mendapatkan produk Cartesian bagi set yang tinggal.
  3. Menambah elemen semasa pada setiap produk daripada panggilan rekursif dan menambahkannya pada set hasil.

Kod Contoh:

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;
}

Nota: Ini pendekatan menjamin produk Cartesian untuk sebarang bilangan set tetapi tidak dapat mengekalkan maklumat jenis generik kerana pengehadan Java.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Produk Cartesan Berbilang Set 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