Artikel ini menjelaskan produk Cartesian dari Java yang mengimplementasikan koleksi dimensi yang tidak diketahui berdasarkan rekursi dan loop. Bagikan untuk referensi Anda, sebagai berikut:
Apa itu produk cartesian?
Dalam matematika, produk Cartesian dari dua set X dan Y, juga dikenal sebagai produk langsung, dinyatakan sebagai x × y, objek pertama adalah anggota X dan objek kedua adalah salah satu dari semua pasangan yang dipesan dari Y.
Dengan asumsi bahwa set a = {a, b} dan set b = {0,1,2}, lalu produk cartesian dari dua set adalah {(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}.
Bagaimana cara menggunakan algoritma program untuk mengimplementasikan produk Cartesian?
Jika jumlah set diketahui sebelum pemrograman, produk Cartesian dapat diperoleh melalui beberapa loop program. Tetapi jika Anda tidak tahu jumlah set sebelum pemrograman, bagaimana Anda bisa mendapatkan produk Cartesian? Misalnya, koleksi mewakili List < List<String>> list ; Jumlah daftar sebelum pemrograman tidak diketahui. Kode berikut menggunakan dua metode rekursi dan loop untuk mengimplementasikan produk Cartesian dari set dimensi yang tidak diketahui:
import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * Two ways to realize the Cartesian product of unknown dimension sets* Created on 2015-05-22 * @author luweijie */public class Descartes { /** * Recursively implement the Cartesian product in dimValue, and the result is placed in the result* @param Data mentah dimvalue* @param Hasil Hasil Data* @param layer dimvalue jumlah lapisan* @param curlist hasil dari setiap produk cartesian*/ private static void rekursif (daftar <Daftar <string>> dimvalue, daftar <Daftar <string>> Hasil, Lapisan Int, Daftar <String> CURLIST) {IF (Layere. (dimvalue.get (layer) .size () == 0) {rekursif (dimvalue, hasil, lapisan + 1, curlist); } else {for (int i = 0; i <DimValue.get (layer) .size (); i ++) {Daftar <String> Daftar = ArrayList baru <string> (curlist); list.add (dimvalue.get (layer) .get (i)); rekursif (dimvalue, hasil, lapisan + 1, daftar); }}} lain jika (layer == dimvalue.size () - 1) {if (dimvalue.get (layer) .size () == 0) {result.add (curlist); } else {for (int i = 0; i <DimValue.get (layer) .size (); i ++) {Daftar <String> Daftar = ArrayList baru <string> (curlist); list.add (dimvalue.get (layer) .get (i)); result.add (daftar); }}}} / *** loop untuk mengimplementasikan produk cartesian di dimvalue, dan hasilnya ditempatkan di hasil* @param dimvalue data mentah* @param Hasil data* / sirkuit void statis privat (Daftar <Tring>> dimvalue, daftar <String> <string> hasil) {int total = 1; untuk (daftar <string> daftar: dimvalue) {total *= list.size (); } String [] myResult = string baru [total]; int itemLoopNum = 1; int loopperitem = 1; int sekarang = 1; untuk (daftar <string> daftar: dimvalue) {sekarang *= list.size (); INT INDEX = 0; int currentSize = list.size (); ItemLoopNum = Total / Sekarang; loopPerItem = total / (itemLoopNum * CurrentSize); int myIndex = 0; untuk (string string: list) {for (int i = 0; i <loopperitem; i ++) {if (myIndex == list.size ()) {myIndex = 0; } untuk (int j = 0; j <itemloopnum; j ++) {myResult [index] = (myResult [index] == null? "": myResult [index] + ",") + list.get (myIndex); indeks ++; } myIndex ++; }}} Daftar <string> stringResult = arrays.aslist (myResult); untuk (string string: stringResult) {string [] stringArray = string.split (","); result.add (arrays.aslist (stringArray)); }} / *** Entri program* @param args* / public static void main (string [] args) {list <string> list1 = new ArrayList <string> (); list1.add ("1"); list1.add ("2"); Daftar <String> list2 = ArrayList baru <string> (); list2.add ("a"); list2.add ("b"); Daftar <String> list3 = ArrayList baru <string> (); list3.add ("3"); list3.add ("4"); list3.add ("5"); Daftar <String> list4 = ArrayList baru <string> (); list4.add ("c"); list4.add ("d"); list4.add ("e"); Daftar <Daftar <String>> dimvalue = ArrayList baru <Daftar <String>> (); dimvalue.add (list1); dimvalue.add (list2); dimvalue.add (list3); dimvalue.add (list4); Daftar <Daftar <String>> Recursiveresult = ArrayList baru <Daftar <String>> (); // mengimplementasikan rekursif produk Cartesian secara rekursif (dimvalue, Recursiveresult, 0, new ArrayList <String> ()); System.out.println ("Rekursif mengimplementasikan produk Cartesian: Total" + Recursiveresult.size () + "hasil"); untuk (daftar <string> daftar: Recursiveresult) {for (string string: list) {System.out.print (string + ""); } System.out.println (); } Daftar <Daftar <String>> CircuitResult = NEW ARRAYLIST <LIST <String> (); sirkuit (dimvalue, sirkuitResult); System.out.println ("Loop mengimplementasikan Produk Cartesian: Total" + CircuitResult.size () + "hasil"); untuk (daftar <string> daftar: circuitResult) {for (string string: list) {system.out.print (string + ""); } System.out.println (); }}}Hasil outputnya adalah:
Menerapkan secara rekursif produk Cartesian: Total 36 hasil1 A 3 C1 A 3 D1 A 3 E1 A 4 C1 A 4 D1 A 4 E1 A 5 C1 A 5 D1 A 5 E1 B 3 C1 B 3 D1 B 3 E1 B 4 C1 B 4 D1 B 4 E1 B 5 C1 B 5 D1 B 5 E2 A 3 C2 C2 5 d2 a 5 e2 b 3 c2 b 3 d2 b 3 e2 b 4 c2 b 4 d2 b 4 e2 b 5 c2 b 5 d2 b 5 e loop implementing the Cartesian product: A total of 36 results1 a 3 c1 a 3 d1 a 3 e1 a 4 c1 a 4 d1 a 4 e1 a 5 c1 a 5 d1 a 5 e1 b 3 c1 b 3 d1 b 3 e1 b 4 c1 b 4 d1 b 4 e1 B 5 C1 B 5 D1 B 5 E2 A 3 C2 A 3 D2 A 3 E2 A 4 C2 A 4 D2 A 4 E2 A 5 C2 A 5 D2 A 5 E2 B 3 C2 B 3 D2 B 3 E2 B 4 C2 B 4 D2 B 4 E2 B 5 C2 B 5 D2 B 5 E 4
Untuk informasi lebih lanjut tentang algoritma Java, pembaca yang tertarik dengan situs ini dapat melihat topik: "struktur data java dan tutorial algoritma", "ringkasan tips node dom java", "ringkasan file operasi java dan direktori" dan "ringkasan tip operasi java cache" Java "Tips Operasi Java"
Saya harap artikel ini akan membantu pemrograman Java semua orang.