บทความนี้อธิบายถึงหลักการและวิธีการดำเนินการของอัลกอริทึมการรวม Java Cartesian แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
การใช้งาน Java ของอัลกอริทึมผลิตภัณฑ์คาร์ทีเซียน:
(1) ในลูปมีเพียงหนึ่งคอลัมน์ที่เลื่อนลงหนึ่งเซลล์ในแต่ละครั้งซึ่งเป็นคอลัมน์ที่ชี้ไปที่ CounterIndex
(2) หากคอลัมน์มาถึงหางดัชนีของคอลัมน์นี้จะถูกรีเซ็ตเป็น 0 และ CounterIndex ชี้ไปที่คอลัมน์ก่อนหน้าซึ่งเทียบเท่ากับการพกพาเพิ่มหนึ่งในดัชนีของคอลัมน์ก่อนหน้า
(3) ในที่สุดจำนวนแถวที่สร้างขึ้นจะถูกควบคุมเพื่อออกจากลูป
การทดสอบคลาสสาธารณะ {สตริงคงที่ส่วนตัว [] aa = {"aa1", "aa2"}; สตริงคงที่ส่วนตัว [] bb = {"bb1", "bb2", "bb3"}; สตริงคงที่ส่วนตัว [] CC = {"CC1", "CC2", "CC3", "CC4"}; สตริงคงที่ส่วนตัว [] [] xyz = {aa, bb, cc}; ส่วนตัวคงที่ int counterindex = xyz.length - 1; int คงที่ส่วนตัว [] counter = {0, 0, 0}; โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {สำหรับ (int i = 0; i <aa.length * bb.length * cc.length; i ++) {system.out.print (aa [counter [0]); System.out.print ("/t"); System.out.print (bb [counter [1]]); System.out.print ("/t"); System.out.print (cc [counter [2]]); System.out.println (); รับมือ(); }} มือจับโมฆะคงที่สาธารณะ () {counter [counterindex] ++; if (counter [counterIndex]> = xyz [counterindex] .length) {counter [counterindex] = 0; counterindex-; if (counterIndex> = 0) {handle (); } counterIndex = xyz.length - 1; -เอาต์พุต 2*3*4 = 24 บรรทัดทั้งหมด:
AA1 BB1 CC1AA1 BB1 CC2AA1 BB1 CC3AA1 BB1 CC4AA1 BB2 CC1AA1 BB2 CC2AA1 BB2 CC3AA1 BB2 CC4AA1 BB3 CC1AA1 BB3 CC2AA BB3 BB3 CC1AA2 BB1 CC2AA2 BB1 CC3AA2 BB1 CC4AA2 BB2 CC1AA2 BB2 CC2AA2 BB2 CC3AA2 BB2 CC4AA2 BB3 CC1AA2 BB3 CC3AA2 BB3 CC4
เมื่อเร็ว ๆ นี้ฉันพบข้อกำหนดอัลกอริทึมผลิตภัณฑ์คาร์ทีเซียน ตัวอย่างเช่นพารามิเตอร์ที่ผ่านคือ "1,3,6,7 == 4,5,8,9 == 3,4 == 43,45,8,9 == 35,4" และรายการที่ส่งคืนคือ [1,4,3,35,35] [1,4,3,43,4] แนวคิดปัจจุบันมีดังนี้:
นำเข้า java.util.arraylist; นำเข้า java.util.Arrays; นำเข้า java.util.list; คลาสสาธารณะ descartestest { /** * รับผลิตภัณฑ์คาร์ทีเซียนของ n sets * * คำอธิบาย: ถ้าสตริงที่ผ่านคือ: "1,2,3 == 5,6 == 7,8" a = [1, 2, 3] * b = [5, 6] * c = [7, 8] * ขนาดคือ: a_length = 3, b_length = 2, c_length = 2, * ขนาดทั้งหมดของรายการเป้าหมายคือ: จำนวนของการบันทึกทั้งหมด * 2 = 12 * องค์ประกอบใน A, จำนวนลูป = จำนวนทั้งหมดของบันทึก/(จำนวนองค์ประกอบ*จำนวนผลิตภัณฑ์คาร์ทีเซียนของชุดที่ตามมา) = 12/(3*4) = 1 ครั้งจำนวนครั้งที่แต่ละองค์ประกอบจะถูกพิมพ์ต่อลูป: จำนวนผลิตภัณฑ์คาร์ทีเซียน 12/(2* 2) = 3 ครั้งจำนวนครั้งที่แต่ละลูปถูกพิมพ์ต่อองค์ประกอบ: จำนวนผลิตภัณฑ์คาร์ทีเซียนของชุดที่ตามมา = 2* จำนวนครั้งที่วนซ้ำสำหรับแต่ละองค์ประกอบใน c = จำนวนทั้งหมดของบันทึก/(จำนวนองค์ประกอบ* จำนวนของชุดคาร์ทีเซียน * ผลการทำงาน: * [[1, 2, 3], [5, 6], [7, 8]] 1,5,7, 1,5,8, 1,6,7, 1,6,8, 2,5,7, 2,5,8, 2,6,7, 2,6,8, 3,5,7, 3,5,8 B ลูปต่อองค์ประกอบ 3 ครั้งแต่ละองค์ประกอบในลูปต่อองค์ประกอบ 6 ครั้งแต่ละครั้งพิมพ์ 1 * * @param args */ โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// วิธีการที่สร้างอัตโนมัติโดยอัตโนมัติสตริง Str String str = "1,3,6,7 == 4,5,8,9 == 3,4 == 43,45,9 รายการ <String> result = descartes (str); System.out.println (ผลลัพธ์); } @suppresswarnings ("rawtypes") รายการคงที่สาธารณะ <String> Descartes (String str) {string [] list = str.split ("=="); รายการ <list> strs = new ArrayList <list> (); สำหรับ (int i = 0; i <list.length; i ++) {strs.add (array.aslist (รายการ [i] .split (","))); } system.out.println (strs); ทั้งหมด int = 1; สำหรับ (int i = 0; i <strs.size (); i ++) {total*= strs.get (i) .size (); } string [] mySesult = สตริงใหม่ [ทั้งหมด]; int ตอนนี้ = 1; // จำนวนการพิมพ์ต่อองค์ประกอบ int itemloopnum = 1; // จำนวนลูปทั้งหมดต่อองค์ประกอบ int loopperItem = 1; สำหรับ (int i = 0; i <strs.size (); i ++) {รายการ temp = strs.get (i); ตอนนี้ = ตอนนี้*temp.size (); // ค่าดัชนีของอาร์เรย์เป้าหมายคือ int index = 0; int currentsize = temp.size (); itemloopnum = ทั้งหมด/ตอนนี้; loopperItem = total/(itemloopnum*currentsize); int myIndex = 0; สำหรับ (int j = 0; j <temp.size (); j ++) {// จำนวนลูปทั้งหมดต่อองค์ประกอบสำหรับ (int k = 0; k <loopperItem; k ++) {ถ้า (myindex == temp.size ()) myIndex = 0; // จำนวนการพิมพ์สำหรับแต่ละองค์ประกอบต่อลูปสำหรับ (int m = 0; m <itemloopnum; m ++) {mysesult [index] = (mysesult [index] == null? "": mysesult [index]+",")+(String) temp.get (myindex)); ดัชนี ++; } MyIndex ++; }}} return array.aslist (mySesult); -รันผลลัพธ์เอาท์พุท:
[[1, 3, 6, 7], [4, 5, 8, 9], [3, 4], [43, 45, 8, 9], [35, 4]
[1,4,3,43,35, 1,4,3,43,4, 1,4,3,45,35, 1,4,3,45,4, 1,4,3,8,4, 1,4,3,35,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,45, 1,4,4,4,4,4,4, 1,4,4,8,35, 1,4,4,4,9,35, 1,4,4,9,4,4, 1,5,3,43,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,43,4,4,4,4,4,4,4,4,43,4,4,4,43, 1,5,3,45, 1,5,3,45, 1,5,3,45, 1,5,3,45, 1,5,3,45, 1,5,3,45, 1,5,3,45, 1,5,3,45,45,45,45,45,45,45,45,45,45 1,5,3,45, 1,5,3,45, 1,5,3,45, 1,5,3,45, 1,5,3,45, 1,5,3,45, 1,5,3,45, 1,5,3,45,45,45,45,45,45,45,45,45,45 1,5,3,45, 1,5,3,8,35, 1,5,3,8,4, 1,5,3,9,35, 1,5,3,9,4,4, 1,4,43,35,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,43, 1,5,4,9,35, 1,5,4,9,4, 1,8,3,43,35, 1,8,3,45, 1,8,3,45, 1,8,3,45, 1,8,8,8,8,8,45,8,45, 1,8,45,45,45 1,8,3,9,35, 1,8,3,9,35, 1,8,3,9,35, 1,8,3,9,35, 1,8,3,9,35, 1,8,3,9,35, 1,3,3,3,3,3,3,3,3,3,35,3,35,35,35,35,35, 1,8,4,43,35, 1,8,4,43,4, 1,8,4,45,35, 1,8,4,45,4, 1,8,4,8,4,8,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 1,9,3,45, 1,9,3,45, 1,9,3,8,4, 1,9,3,9,4, 1,9,4,43,4,4, 1,9,4,45,35,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,43,43,43,43,43,43, 1,9,4,45,4, 3,4,4,4,35, 3,4,4,4,4,35,35, 3,4,3,4,3,4,3,4,3,4,3,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s 3,4,4,4,4,4,3,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s ,, 4,4,4,3,4,4,4,4,4,3,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s 3,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4,4,4,4,4s 3,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,35, 3,5,3,43,35, 3,5,4,4,4,4,3,5,4,3,5,4,3,5,3,5,3,5,3,5,3,5,3,43,43,43,43,43,43,43,43,43,43,4,35,3,5,4,35,4,35,4,35,4,35,4,35,4,35,4,35,4,35,43,43,3,5 3,5,3,9,4, 3,5,4,43,35, 3,5,4,43,4, 3,5,4,45,4, 3,5,4, 3,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 3,5,4,4, 3,8,3,45, 3,8,3,43,4, 3,8,3,45, 3,8,3,45, 3,8,3,45, 3,8,3,45, 3,8,3,45, 3,45, 3,8,3,45, 3,8,45, 3,8,45 3,8,3,8,4, 3,8,3,9,35, 3,8,3,9,4, 3,8,4,43,4, 3,8,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,43,4,43,4,43,4,43,4, 3,9,3,43,4, 3,9,3,45, 3,9,3,45, 3,9,3,45, 3,9,3,45, 3,9,3,9,3,45 3,9,3,9,3,9,3,9,3,9,3,3,9,3,9,3,9,3,9,3,9,3,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9s3,9,9,9,9, , 3,9,3,3,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,3,9,3,9,9,9,9,3,9,9,9,3,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9s3,9,3,9,9, , 3,9,3,3,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,3,9,3,9,9,9,9,3,9,9,9,3,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9s3,9,3,9,9, , 3,9,3,3,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,3,9,3,9,9,9,9,3,9,9,9,3,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9s3,9,3,9,9, 3,9,4,43,35, 3,9,4,43,4, 3,9,4,45,35, 3,9,4,45,4,4,4,4,4,4,4,4,4,35, 3,9,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,45,4,35, 6,4,3,45, 6,4,3,45, 6,4,3,8,4, 6,4,3,9,4, 6,4,4,4,4,43,35, 6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,35,4,43,4,43, 6,4,4,4,4,4,4,43,4, 6,4,4,4,45,35, 6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4,4,4,4s 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4,4,4,4s 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4,4,4,4s 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4s4,4,4,4,4,4,4,4,4,4,4s 6,4,4,8,35, 6,4,4,8,4,6,4,4,9,35, 6,4,4,9,35, 6,4,4,4,4,4,6,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,4,5,5,4,5,5,4,5,5,4,5,4,5,5,4,5,5,4,5,5,4,5,5,4,5,5,4,43, 6,5,3,9,4, 6,5,4,43,4, 6,5,45,35, 6,5,4,4, 6,5,4,8,35, 6,5,4,9,35, 6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 6,5,4,8,35, 6,5,4,9,35, 6,5,4,9,35, 6,5,4,9,4, 6,8,3,43,35, 6,8,3,43,4, 6,8,3,45,35, 6,3,4,4,4,8,4,8,4,8,4,8,3,45,3,45,3,3,3,3, 6,8,3,8,4, 6,8,3,9,35, 6,8,3,9,4, 6,8,4,43,4, 6,8,4,45, 6,8,4,45,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,45,4,45,45,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,3,45, 6,9,3,45, 6,9,45,45,45,45,45,45,45,45,45, 6,9,45,45,45 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,3,45, 6,9,3,45, 6,9,45,45,45,45,45,45,45,45,45, 6,9,45,45,45 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,3,9,9,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,3,3,9,3,9,3,9,3,9,3,3,3,3,3,3,3,3,3,3,3,3, 6,9,35,45,45,45,45,45, 6,9,4,45,35, 6,9,4,45,4, 6,9,4,4, 6,9,4,8,35, 6,9,4,4,4,4, 7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 7,4,3,8,4, 7,4,3,8,4, 7,4,3,9,35, 7,4,3,9,4, 7,4,3,8,4, 7,4,3,9,35, 7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,43,4,43,4,43, 7,4,4,4,4,4,7,4,4,8,35, 7,4,8,4,7,4,4,4,9,35, 7,4,4,9,35, 7,4,4,9,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,43,4,43,4,43,43,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 7,5,3,45, 7,5,3,8,4, 7,5,3,9,35, 7,5,4,43,4, 7,5,4,43,4,4, 7,5,4,43,4, 7,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,43,4,43,4,43,4, 7,5,4,8,4,7,5,4,8,4,4,7,5,4,9,35, 7,5,4,9,35, 7,5,4,9,4,7,8,3,43,4,4,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 7,8,3,8,4, 7,8,4,9,35, 7,8,4,9,35, 7,8,4,9,35, 7,8,4,43,4, 7,8,4,45, 7,8,4,4,45,4,4,4,4,4,4,4,4,4,4,4,4,4,4,45, 7,8,4,9,35, 7,8,4,9,35, 7,8,4,4, 7,8,4,9,35, 7,8,4,4,4,4,4, 7,8,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 7,8,4,9,35, 7,8,4,9,4,4, 7,9,3,43,35, 7,9,3,43,4,4, 7,9,3,45,35, 7,9,45,4, 7,9,9,4,4,4,4,4,4,4,4,4,4,45,4,45,4,45,4,45, 7,9,4,43,35, 7,9,4,45, 7,9,4,45, 7,9,4, 7,9,4,8,35, 7,9,4,9,9,9,4,9,9,4,9,4,9,4,9,4,9,4,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,4,9s
อัลกอริทึมแบบเรียกซ้ำ:
โมฆะคงที่สาธารณะ fn (รายการ <string []> list, string [] arr, str str) {// iterate list list <string> li = new ArrayList <String> (); สำหรับ (int i = 0; i <list.size (); i ++) {// รับอาร์เรย์ปัจจุบันถ้า (i == list.indexof (arr)) {// iterate array system.out.println (arr.length); สำหรับ (String ST: arr) {st = str + st; if (i <list.size ()-1) {fn (list, list.get (i+1), st); } อื่นถ้า (i == list.size ()-1) {li.add (st); }}}} สำหรับ (int i = 0; i <li.size (); i ++) {system.out.println (li.get (i)); -สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริทึม Java ผู้อ่านที่มีความสนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "โครงสร้างข้อมูล Java และการสอนอัลกอริทึม", "บทสรุปของเคล็ดลับการดำเนินงาน Java Dom", "บทสรุปของไฟล์ Java และเคล็ดลับการดำเนินการไดเรกทอรี" และ "สรุป
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน