Dieser Artikel beschreibt die Prinzipien und Implementierungsmethoden des Java -kartesischen Integrationsalgorithmus. Teilen Sie es für Ihre Referenz wie folgt weiter:
Java -Implementierung des kartesischen Produktalgorithmus:
(1) In der Schleife bewegt sich nur eine Säule jeweils eine Zelle nach unten, wobei die Säule durch CounterIndex gezeigt wird.
(2) Wenn die Spalte den Schwanz erreicht, wird der Index dieser Spalte auf 0 zurückgesetzt, und CounterIndex zeigt auf die vorherige Spalte, die dem Tragen entspricht, und fügt einen des Index der vorherigen Spalte hinzu.
(3) Schließlich wird die Anzahl der generierten Zeilen gesteuert, um die Schleife zu verlassen.
public class test {private statische String [] aa = {"aa1", "aa2"}; private statische String [] BB = {"BB1", "BB2", "BB3"}; private statische String [] cc = {"cc1", "cc2", "cc3", "cc4"}; private statische String [] [] xyz = {aa, bb, cc}; private statische Int counterIndex = xyz.length - 1; private static int [] counter = {0, 0, 0}; public static void main (String [] args) löst eine Ausnahme aus {für (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 [Zähler [1]]); System.out.print ("/t"); System.out.print (CC [Zähler [2]]); System.out.println (); handhaben(); }} public static void handle () {counter [counterIndex] ++; if (counterIndex]> = xyz [counterIndex] .Length) {counter [counterIndex] = 0; Counterindex--; if (counterIndex> = 0) {Handle (); } coterIndex = xyz.length - 1; }}}Ausgabe 2*3*4 = 24 Zeilen insgesamt:
AA1 BB1 CC1AA1 BB1 CC2AA -BB2 CC1AA1 BB2 CC2AA1 BB2 CC3AA1 BB2 BB2 CC4AA1 BB3 CC4AAC2AAC2AA1 BB3 CC3AA1 BB3AAC2AAC2AAC2AACC2AACC2AACC2AACC1AA cc1aa2 bb1 cc2aa2 bb1 cc3aa2 bb1 cc4aa2 bb2 cc1aa2 bb2 cc2aa2 bb2 cc3aa2 bb2 cc4aa2 bb3 cc1aa2 bb3 cc3aa2 bb3 cc4
Kürzlich habe ich auf eine kartesische Produktalgorithmusanforderung gestoßen. Zum Beispiel beträgt der übergebene Parameter "1,3,6,7 == 4,5,8,9 == 3,4 == 43,45,8,9 == 35,4", und die zurückgegebene Liste ist, wie [1,4,3,43,35] [1,4,3,43,4] [1,4,3,35, 35] [1,4,3,4] [4*2 = 2 = 2 = 2 = 2 = 2 = 22 = 22 = 22 = 22 = 22 = 22 = 22 = 22 = 22 = 22 = 22 = 22 =). Die aktuelle Idee ist wie folgt:
import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class DescartesTest { /** * Get the Cartesian product of N sets* * Description: If the passed string is: "1,2,3==5,6==7,8" * Convert to a string array as: [[1, 2, 3], [5, 6], [7, 8]] * a = [1, 2, 3] * b = [5, 6] * c = [7, 8] * Die Größen sind: a_length = 3, b_length = 2, c_length = 2, * Die Gesamtgröße der Zielliste beträgt: TotalSize = 3 * 2 * 2 = 12 * Für jede Unterlage A, C, C, die Anzahl der SUPSEL -Anzahl der Aufzeichnungen. Anzahl der Aufzeichnungen (Anzahl der Aufzeichnungen) (Anzahl der Aufzeichnungen) (Anzahl der Elemente. Anzahl der Elemente der Anzahl der Elemente der Anzahl der Elemente von der Anzahl der Elemente der Anzahl der Elemente von CHARTS. In a, die Anzahl der Schleifen = Gesamtzahl der Datensätze/(Anzahl der Elemente*Anzahl der kartesischen Produkte des nachfolgenden Satzes) = 12/(3*4) = 1 Mal wird die Anzahl der Zeiten, die jedes Element pro Schleife gedruckt wird: Die Anzahl der kartesischen Produkte der nachfolgenden Anzahl von Aufzeichnungen (Anzahl der Aufzeichnungen) (Anzahl der Aufzeichnungen). 12/(2 * 2) = 3 -mal, die Anzahl der Male, die jede Schleife pro Element gedruckt ist: Die Anzahl der kartesischen Produkte des nachfolgenden Satzes = 2 * Häufigkeit der Male -Looping für jedes Element in c = Gesamtzahl der Datensätze/(Anzahl der Elemente * Anzahl der kartesischen Produkte. Laufen Ergebnis: * [[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. Schleife pro Element 3 mal, jedes Element in c Schleife pro Element 6 mal, jedes Mal drucken 1 * * @param args */ public static void main (String [] args) {// Todo automatisch generierte Methode Stub String String Str = "1,3,6,7 == 4,5,8,9 == 3,4 == 43,45,9 == 35,35,35, 35,35,4"; Liste <String> result = Descartes (str); System.out.println (Ergebnis); } @SuppressWarnings ("rawtypes") public static list <string> descartes (String str) {String [] list = str.split ("=="); Liste <List> strs = new ArrayList <List> (); für (int i = 0; i <list.length; i ++) {strs.Add (arrays.aslist (list [i] .Split (",")); } System.out.println (strs); int total = 1; für (int i = 0; i <strs.size (); i ++) {Total*= strs.get (i) .size (); } String [] mySesult = new String [Gesamt]; int jetzt = 1; // die Anzahl der Drucke pro Element int itemloopnum = 1; // die Gesamtzahl der Schleifen pro Element int LoopperItem = 1; für (int i = 0; i <strs.size (); i ++) {list temp = strs.get (i); jetzt = jetzt*temp.size (); // Der Indexwert des Zielarrays ist int index = 0; int currentSize = temp.size (); itemLoopnum = total/jetzt; LooperItem = Total/(itemLoopnum*currentSize); int MyIndex = 0; für (int j = 0; j <temp.size (); j ++) {// Die Gesamtzahl der Schleifen pro Element ist für (int k = 0; k <lopperItem; k ++) {if (myIndex == temp.Size ()) myIndex = 0; // Die Anzahl der Drucke für jedes Element pro Schleife für (int m = 0; m <itemLoopnum; m ++) {mySesult [index] = (mySesult [index] == null? Index ++; } MyIndex ++; }}} return arrays.aslist (mySesult); }}Ausgabe von Ausgabe: Ausgabe:
[[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,9,35, 1,4,3,9,4, 1,4,4,43,35, 1,4,4,4,4,43,4, 1,4,4,4,4,4,4, 1,4,4,8,35, 1,4,4,4,9,35, 1,4,4,9,4, 1,5,3,43,4, 1,5,3,43,4, 1,5,3,45, 1,5,3,43,4, 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, 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, 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, 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,8,35, 1,5,3,8,4, 1,5,3,9,35, 1,5,3,9,4, 1,5,4,43,35, 1,5,4,43,4, 1,5,4,45,35, 1,5,4,45,4, 1,5,4,8,35, 1,5,4,8,4, 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,3,45, 1,8,3,45, 1,8,3,8,4, 1,8,3,8,4, 1,8,3,8,4, 1,8,3,8,4, 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,8,3,9,35, 1,8,3,9,35, 1,8,3,9,35, 1,8,3,9,3,4, 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, 1,8,4,8,4, 1,8,4,9,35, 1,8,4,9,4, 1,9,3,43,4, 1,9,3,43,4, 1,9,3,45, 1,9,3,45, 1,9,3,8,4, 1,9,3,9,4, 1,9,4,43,4, 1,9,4,45,35, 1,9,3,8,4, 1,9,3,9,4, 1,9,4,43,4, 1,9,4,43,4, 1,9,4,45,35, 1,9,4,45,4, 3,4,4,35, 3,4,4,4,4,3,35, 3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,4,3,4,4,3,4,4,3,4,4,3,4,4,4,3,35, 3,4,4,4,4,4,3,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3 ,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,4,3,4,4,4,4,35, 3,4,4,4,4,4,4,3,4,4,4,4,3,4,4,4,4,4,4,4,4,4,35, 3,4,4,4,4,4,4,4,35, 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,35, 3,4,4,4,4,4,4,3,4,4,4,4,4,3,4,4,4,4,4,35, 3,5,3,43,35, 3,5,3,43,4, 3,5,3,45,35, 3,5,3,45,4, 3,5,3,8,4, 3,5,3,8,4, 3,5,3,9,35, 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,45,4, 3,5,4, 3,5,4,9,35, 3,5,4, 3,5,4,9,4, 3,8,3,43,4, 3,8,3,43,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,3,45, 3,8,3,45, 4, 3,8,3,8,35, 3,8,3,8,4, 3,8,3,9,35, 3,8,3,9,4, 3,8,4,43,4, 3,8,4,43,4, 3,8,4,45,35, 3,8,4,45,4, 3,8,4,45,4, 3,8,4,8,4, 3,8,4,9,35, 3,8,4,9,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,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,3,9,3,9,3,3,9,3,9,3,9,3,9,3,9 , 3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,3,3,3,3,9,3,3,9,3,9,3,3,9,3,3,9,3,9,3,9 , 3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,3,3,3,3,9,3,3,9,3,9,3,3,9,3,3,9,3,9,3,9 , 3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,9,3,3,3,3,3,9,3,3,9,3,9,3,3,9,3,3,9,3,9,3,9 3,9,4,43,35, 3,9,4,43,4, 3,9,4,45,35, 3,9,4,45,4, 3,9,4,8,35, 3,9,4,8,4,3,9,4,9,4,35, 3,9,4,9,4,3,35, 6,4,3,43,4, 6,4,3,43,4, 6,4,3,45, 6,4,3,45, 6,4,3,8,4, 6,4,3,9,4, 6,4,4,4,43,35, 6,4,4,4,43,4, 6,4,4,45,35, 6,4,4,4,4,4,4,4,4,3,35, 6,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,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,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,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 6,4,4,8,35, 6,4,4,8,4,6,4,4,9,35, 6,4,4,9,35, 6,4,4,9,4,6,5,3,43,4,6,5,3,43,4,6,5,3,45, 6,5,3,45,4,6,5,3,8,4, 6,5,3,8,4, 6,5,3,9,4, 6,5,4,43,4, 6,5,4,45,35, 6,5,4,4, 6,5,4,8,35, 6,5,4,9,35, 6,5,4,9,35, 6,5,4,4, 6,5,4,9,35, 6,5,4,4, 6,5,4,4, 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,8,3,45,4, 6,8,3,8,4, 6,8,3,8,4, 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, 6,8,4,9,35, 6,8,4,9,4, 6,9,3,43,4, 6,9,3,43,4, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3,45, 6,9,3 6,9,3,8,35, 6,9,3,8,4, 6,9,3,9,35, 6,9,3,9,4,6,9,4,43,35, 6,9,4,43,4, 6,9,4,45,35, 6,9,4,45,4, 6,9,4,4, 6,9,4,8,35, 6,9,4,9,4, 7,4,3,43,4, 7,4,3,45, 7,4,3,8,4, 7,4,3,8,4, 7,4,3,9,4, 7,4,3,43,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,3,9,4, 7,4,4,43,35, 7,4,4,43,4,7,4,4,45,35, 7,4,4,4,4,4,7,4,4,8,35, 7,4,4,8,4,7,4,4,9,35, 7,4,4,9,35, 7,4,4,9,35, 7,4,4,9,4,7,5,3,43,4, 7,5,3,43,4, 7,5,3,45, 7,5,3,45, 7,5,3,45, 7,5,3,8,4, 7,5,3,9,35, 7,5,4,43,4, 7,5,4,43,4, 7,5,4,43,4, 7,5,4,43,4, 7,5,4,45,35, 7,5,4,45,4, 7,5,4,8,35, 7,5,4,8,4,7,5,4,8,4,7,5,4,9,35, 7,5,4,9,35, 7,5,4,9,4,7,8,3,43,4, 7,8,3,43,4, 7,8,3,45, 7,8,3,45, 7,8,3,45, 7,8,3,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,45, 7,8,4,8,4,9,35, 7,8,4,9,35, 7,8,4,9,35, 7,8,4,4, 7,8,4,9,35, 7,8,4,9,35, 7,8,4,4, 7,8,4,9,35, 7,8,4,9,4,4, 7,8,4,9,35, 7,8,4,4, 7,8,4,9,35, 7,8,4,9,4,4, 7,8,4,9,35, 7,8,4,9,4,4, 7,8,4,9,35, 7,8,4,9,4,4, 7,9,3,43,35, 7,9,3,43,4, 7,9,3,45,35, 7,9,3,45,4, 7,9,3,8,4, 7,9,3,8,4, 7,9,3,9,4, 7,9,3,9,4, 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,4,9,4,9,4,9,4,9,4,9,4,9,4,9,4,9,4,9,4,9,4,9,4,9,4]
Rekursiver Algorithmus:
public static void fn (list <string []> list, string [] arr, String str) {// ITERATELISTE LISTE <string> li = new ArrayList <string> (); für (int i = 0; i <list.size (); i ++) {// Erhalten Sie das aktuelle Array if (i == list.indexof (arr)) {// Itererieren Sie das Array System.out.println (arr.Length); für (String st: arr) {st = str + st; if (i <list.size ()-1) {fn (list, list.get (i+1), st); } else if (i == list.size ()-1) {li.add (st); }}}} für (int i = 0; i <li.size (); i ++) {System.out.println (li.get (i)); }}Für weitere Informationen zu Java -Algorithmen können Leser, die an dieser Website interessiert sind, die Themen "Java -Datenstruktur und Algorithmus -Tutorial", "Zusammenfassung der Java -Operation DOM -Knoten -Tipps", "Zusammenfassung der Java -Datei- und Verzeichnisoperationstipps" und "Zusammenfassung der Java -Cache -Operation Tipps" anzeigen
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.