Este artigo descreve os princípios e métodos de implementação do algoritmo de integração cartesiano Java. Compartilhe -o para sua referência, como segue:
Implementação de Java do algoritmo cartesiano de produtos:
(1) No loop, apenas uma coluna se move para baixo em uma célula de cada vez, que é a coluna apontada pelo CounterIndex.
(2) Se a coluna atingir a cauda, o índice desta coluna será redefinido para 0, e o contra -index aponta para a coluna anterior, o que equivale ao transporte, adicionando um dos índices da coluna anterior.
(3) Finalmente, o número de linhas geradas é controlado para sair do loop.
classe pública teste {private static string [] aa = {"aa1", "aa2"}; String estática privada [] bb = {"bb1", "bb2", "bb3"}; String estática privada [] cc = {"cc1", "cc2", "cc3", "cc4"}; String estática privada [] [] xyz = {aa, bb, cc}; private estático int contraIndex = xyz.length - 1; private static int [] contador = {0, 0, 0}; public static void main (string [] args) lança exceção {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 (); lidar(); }} public static void handle () {contador [contraIndex] ++; if (contador [contraIndex]> = xyz [contraIndex] .Length) {contador [contraIndex] = 0; contraIndex--; if (contraIndex> = 0) {handle (); } contraIndex = xyz.length - 1; }}}Saída 2*3*4 = 24 linhas no total:
AA1 BB1 CC1AA1 BB1 CC2AA1 BB1 CC3AA1 BB1 CC4AA1 BB2 CC1AA1 BB2 CC2AA1 BB2 CC3A1 BB2 CC4AA1 cc1aa2 bb1 cc2aa2 bb1 cc3aa2 bb1 cc4aa2 bb2 cc1aa2 bb2 cc2aa2 bb2 cc3aa2 bb2 cc4aa2 bb3 cc1aa2 bb3 cc3aa2 bb3 cc4
Recentemente, encontrei um requisito de algoritmo de produto cartesiano. For example, the passed parameter is "1,3,6,7==4,5,8,9==3,4==43,45,8,9==35,4", and the returned list is, such as [1,4,3,43,35][1,4,3,43,4][1,4,3,45,35]..., the list contains 4*4*2*4*2=256 elements. A idéia atual é a seguinte:
importar java.util.ArrayList; importar java.util.arrays; importar java.util.list; public class Descartestest { /** * Obtenha o produto cartesiano de n conjuntos * * Descrição: se a sequência passada] é: "1,2,3 == 5,6 == 7,8" * convert para uma cadeia é a = [1, 2, 3] * b = [5, 6] * c = [7, 8] * Os tamanhos são: a_length = 3, b_length = 2, c_length = 2, * o tamanho total da lista de alvos é: toTalsize = 3 * 2 * 2 = 12 * para cada subconjunto A, bem, c, o número de loops = total de/total de/1 * 2 * 2 = 12 * para cada subconjunto A, bem, c, o número de loops = total de/total de/total de/1 * 2 *. a, o número de loops = número total de registros/(número de elementos*Número de produtos cartesianos do conjunto subsequente) = 12/(3*4) = 1 tempo, o número de vezes cada elemento é impresso por loop: o número de produtos cartesianos do número 2*do número 2*2*para cada elemento em b, o número de loops = registros de registros/(número total de registros*. 3 vezes, o número de vezes que cada loop é impresso por elemento: o número de produtos cartesianos do conjunto subsequente = 2 * Número de vezes loop para cada elemento em c = número total de registros / (número de elementos * Número de produtos cartesianos do conjunto de 1,11 / (2 * 1) = 6 vezes o número de vezes que cada elemento é impresso por 1,00) = 12 / (2 * 1) = 6 vezes o número de vezes que cada elemento é impresso por 1,00) = 12 / (2 * 1) = 6 vezes o número de vezes que cada elemento é impresso por meio de 1) 2, 3], [5, 6], [7, 8]] 1,5,7, 1,5,8, 1,6,7, 1,6,8, 2,5s. Elemento no loop c por elemento 6 vezes, cada vez que imprimir 1 * * @param args */ public static void main (string [] args) {// TODO Método Gerado Auto-Gerado Stub String str = "1,3,6,7 == 4,5,8,9 == 3,4 == 43,45,8,9 == 3,44"; List <String> resultado = Descartes (STR); System.out.println (resultado); } @Suppresswarnings ("RawTypes") Lista estática pública <String> Descartes (string str) {string [] list = str.split ("=="); List <List> strs = new ArrayList <List> (); for (int i = 0; i <list.length; i ++) {strs.add (Arrays.asList (List [i] .split (",", "))); } System.out.println (strs); int total = 1; for (int i = 0; i <strs.size (); i ++) {total*= strs.get (i) .size (); } String [] mySesult = new string [total]; int agora = 1; // o número de impressões por elemento int itemloopnum = 1; // o número total de loops por elemento int loopperItem = 1; for (int i = 0; i <strs.size (); i ++) {list temp = strs.get (i); agora = agora*temp.size (); // O valor do índice da matriz de destino é int index = 0; int currentSize = temp.size (); itemloopnum = total/agora; loopperItem = total/(itemloopnum*CurrentSize); int myIndex = 0; para (int j = 0; j <temp.size (); j ++) {// O número total de loops por elemento é para (int k = 0; k <loopperItem; k ++) {if (myIndex == temp.size ()) myIndex = 0; // o número de impressões para cada elemento por loop para (int m = 0; m <itemloopnum; m ++) {mySesult [index] = (mySesult [index] == null? "": MySesult [index]+",")+((string) temp.get (myIndex)); índice ++; } myIndex ++; }}} return Arrays.asList (mySesult); }}Execução de resultados de execução:
[[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,3s. 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,4,35, 3,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,3,4,4,4,4,35, 3,4,4,4,4,4,4,3,4,4,4,4,4,3,4,4,4,4,4,3,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,4s. 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 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,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,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 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,45, 6,9,3,45, 6,9,3,45, 6,9,45, 6,9,3,45, 6,9,3,45, 6,9,45, 6,9,3,45, 6,9,3,45, 6,9,45, 6,3,,45, 6,9,3,45, 6,9,45, 6,3,3,45, 6,9,3,45, 6,9,45, 6,3,3,45, 6,9,3,45, 6,45, 6,3,3,45, 6,9,3,45, 6,9,45, 6,3,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,45, 6,9,3,45, 6,9,3,45, 6,9,45, 6,9,3,45, 6,9,3,45, 6,9,45, 6,9,3,45, 6,9,3,45, 6,9,45, 6,3,,45, 6,9,3,45, 6,9,45, 6,3,3,45, 6,9,3,45, 6,9,45, 6,3,3,45, 6,9,3,45, 6,45, 6,3,3,45, 6,9,3,45, 6,9,45, 6,3,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]
Algoritmo recursivo:
public static void fn (list <string []> list, string [] arr, string str) {// Lista de iteração <String> li = new ArrayList <String> (); para (int i = 0; i <list.size (); i ++) {// Obtenha a matriz atual se (i == list.indexOf (arr)) {// iterar o Array System.out.println (arr.length); para (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 obter mais informações sobre os algoritmos Java, os leitores interessados neste site podem visualizar os tópicos: "Estrutura de dados Java e tutorial de algoritmo", "Resumo das dicas de nó da operação Java Dom", "Resumo de dicas de operação de Java e Operação de Java" e "Resumo de Java cache" Tips "TIPS"
Espero que este artigo seja útil para a programação Java de todos.