Este artículo describe los principios y métodos de implementación del algoritmo de integración cartesiana de Java. Compártelo para su referencia, como sigue:
Implementación de Java del algoritmo de productos cartesianos:
(1) En el bucle, solo una columna se mueve hacia abajo de una celda a la vez, que es la columna apuntada por contraindex.
(2) Si la columna alcanza la cola, el índice de esta columna se restablece a 0, y el contraindex señala la columna anterior, que es equivalente a transportar, agregando uno del índice de la columna anterior.
(3) Finalmente, el número de filas generadas se controla para salir del bucle.
prueba de clase pública {cadena estática privada [] aa = {"aa1", "aa2"}; cadena estática privada [] bb = {"bb1", "bb2", "bb3"}; cadena estática privada [] cc = {"cc1", "cc2", "cc3", "cc4"}; cadena estática privada [] [] xyz = {aa, bb, cc}; Private static int contarindex = xyz.length - 1; privado static int [] contador = {0, 0, 0}; public static void main (string [] args) lanza la excepción {for (int i = 0; i <aa.length * bb.length * cc.length; i ++) {system.out.print (aa [contador [0]]); System.out.print ("/t"); System.out.print (BB [contador [1]]); System.out.print ("/t"); System.out.print (CC [contador [2]]); System.out.println (); manejar(); }} public static void handle () {contador [contraindex] ++; if (contador [contraindex]> = xyz [contraindex] .length) {contador [contraindex] = 0; contraindex--; if (contraindex> = 0) {handle (); } contraindex = xyz.length - 1; }}}Salida 2*3*4 = 24 líneas en total:
AA1 BB1 CC1AA1 BB1 CC2AA1 BB1 CC3AA1 BB1 CC4AA1 BB2 CC1AA1 CC1AA2 BB1 CC2AA2 BB1 CC3AA2 BB1 CC4AA2 BB2 CC1AA2 BB2 CC2AA2 BB2 CC3AA2 BB2 CC4AA2 BB3 CC1AA2 BB3 CC3AA2 BB3 CC4
Recientemente encontré un requisito de algoritmo de productos cartesiano. Por ejemplo, el parámetro aprobado es "1,3,6,7 == 4,5,8,9 == 3,4 == 43,45,8,9 == 35,4", y la lista devuelta es, como [1,4,3,43,35] [1,4,3,43,4] [1,4,3,45,35] ..., la lista contiene 4*4*2*2*2*2*. La idea actual es la siguiente:
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] * Los tamaños son: a_length = 3, b_length = 2, c_length = 2, * El tamaño total de la lista de destino es: TotalSize = 3 * 2 * 2 = 12 * para cada subset A, B, C, el número de Toops = Número total de registros de registros/(Número de elementos * Número de Cartes de Cartes de los Cartes de los Cartes de los Cartes) En a, el número de bucles = número total de registros/(número de elementos*número de productos cartesianos del conjunto posterior) = 12/(3*4) = 1 tiempo, el número de veces que cada elemento se imprime por bucle: el número de productos cartesianos del conjunto posterior = 2*2*para cada elemento en B, el número de bucles = Total de registros de registros/(número de elementos*número de productos de carreras de los carritos del carrito de los carritos posteriores) para el conjunto total). 12/(2 * 2) = 3 veces, el número de veces que cada bucle se imprime por elemento: el número de productos cartesianos del conjunto posterior = 2 * número de veces bucle para cada elemento en c = número total de registros/(número de elementos * número de productos cartesianos del conjunto subsiguiente) = 12/(2 * 1) = 6 veces, el número cada elemento se imprime: el número de productos de los carritos de los carritos del carrito de los carritos de los carritos del carrito de los carritos de los carritos de los carritos de los carritos posteriores = 1 * * * * [[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, 3,6,7, 3,6,8] From the result, we can see: each element in a loop per element, each element in b loop per element 3 Times, cada elemento en c bucle por elemento 6 veces, cada vez que imprima 1 * * @param args */ public static void main (string [] args) {// tODO método generado automático stub string str = "1,3,6,7 == 4,5,8,9 == 3,4 == 43,45,8,9 == 35,4"; Lista <String> resultado = descartes (str); System.out.println (resultado); } @SupplesWarnings ("RawTypes") Public Static List <String> Descartes (String Str) {String [] list = str.split ("=="); List <Ind> strs = new ArrayList <Indem> (); for (int i = 0; i <list.length; i ++) {strs.add (arrays.aslist (list [i] .split (","))); } System.out.println (Strs); int total = 1; para (int i = 0; i <strs.size (); i ++) {total*= strs.get (i) .size (); } Cadena [] mySesult = new String [Total]; int Now = 1; // El número de impresiones por elemento int itemloopnum = 1; // El número total de bucles por elemento int loopperitem = 1; for (int i = 0; i <strs.size (); i ++) {list temp = strs.get (i); ahora = ahora*temp.size (); // El valor de índice de la matriz de destino es int index = 0; int corralsize = temp.size (); itemloopnum = total/ahora; loopperitem = total/(itemloopnum*CurrentSize); int myIndex = 0; for (int j = 0; j <temp.size (); j ++) {// El número total de bucles por elemento es para (int k = 0; k <loopperitem; k ++) {if (myIndex == temp.size ()) myIndex = 0; // El número de impresiones para cada elemento por bucle para (int m = 0; m <itemloopnum; m ++) {mySesult [index] = (mySesult [index] == null? "": MySesult [index]+",")+((string) temp.get (myInDex)); índice ++; } myIndex ++; }}} return arrays.aslist (mySesult); }}Ejecutar la salida del resultado:
[[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,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,3,9,35, 1,3,3,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, 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,4,35, 3,4,4,4,4,3,35, 3,4,3,4,4,3,4,4,3,4,4,3,4,4,4,4,3,4,4,3,4,4,4,3,4,4,3,4,4,3,4,4,3,4,3,4, Ejóes y 3,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,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4rosrosros4,44,4. ,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,4,3,4,4,4,4,4,4,4,4,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,455, 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,9,3,9,3,9,3,9.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,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,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,9,3,9,3,9,3,9,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,4,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,35, 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,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,444 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,3,9,4, 6,5,4,43,4, 6,5,4,45,35, 6,5,4,4, 6,5,4,4,35, 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,4,9,4, 6,9,43,4, 6,9,93,4, 6,9,4,4, 6,4, 6,4,4,4,4,4, 6,9,43,4, 6,9, 6,9,4, 6,4,4, 6,9, 6,9, 6,9, 6,9, 6,9, 6,9, 6,9, 6,9,9, 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,44,3,9, 7, 7,4,4,3,4, 7, 7,4,3,9,9,35, 7,4,9,9, 7,4,4,3,4, 7,4,3,9,3,35, 7,4,3,9,4, 7,4,4,3,3,4, 7,4,93,35, 7,419, 7,4,4,4,43,435, 7,44,43,47,44,45,45,45, 7,4,4,4,43,43,43, 7,4,4,41. 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,3,45, 7,5,3,3,4, 7, 7,5,3,99,35, 7,5,443,4, 7,5,443, 7,5,43,4, 7,5,4,4,8,4,4,7,5,5,4,4 a 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,4,35, 7,9,4,9,4,4,9,4,9,4,4,9,4,9,9,4,4,9,4,9,4,4,4,4,9,4,4,4,4,4,4,4,9,4,4,4,4,4,4,9,4,9,9,4,4,4,9,9,9,4,4,9,4,9,4,9,4,4,4,4,4,4,9,9,4,9,4,4,4,4,9,9,4,4,4,4,4,4,4,4,4,4,4,4,4,4,9,9,4,9,4,4,4,9,9,9,4,4,4,4,4,4,4,4,4,4]
Algoritmo recursivo:
public static void fn (list <string []> list, string [] arr, string str) {// iterate list list <string> li = new ArrayList <String> (); for (int i = 0; i <list.size (); i ++) {// Obtenga la matriz actual if (i == list.indexof (arr)) {// iterar el system.out.println (arr.length); for (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); }}}} para (int i = 0; i <li.size (); i ++) {system.out.println (li.get (i)); }}Para obtener más información sobre los algoritmos de Java, los lectores interesados en este sitio pueden ver los temas: "Estructura de datos Java y tutorial de algoritmo", "Resumen de las puntas de nodo de operación de Java DOM", "Resumen de Java Archivo y TIPS de operación de directorio" y "Summary of Java Cache Operation Tips" TIPS ""
Espero que este artículo sea útil para la programación Java de todos.