Cet article décrit les principes et les méthodes de mise en œuvre de l'algorithme d'intégration cartésienne Java. Partagez-le pour votre référence, comme suit:
Implémentation Java de l'algorithme de produit cartésien:
(1) Dans la boucle, une seule colonne descend une cellule à la fois, qui est la colonne pointée par le contre-index.
(2) Si la colonne atteint la queue, l'index de cette colonne est réinitialisé à 0 et le contre-index pointe vers la colonne précédente, ce qui équivaut à transporter, ajoutant l'un des index de la colonne précédente.
(3) Enfin, le nombre de lignes générés est contrôlé pour quitter la boucle.
classe publique test {String statique privé [] aa = {"aa1", "aa2"}; String statique privé [] bb = {"bb1", "bb2", "bb3"}; chaîne statique privée [] cc = {"cc1", "cc2", "cc3", "cc4"}; chaîne statique privée [] [] xyz = {aa, bb, cc}; private static int counterIndex = xyz.length - 1; private static int [] compter = {0, 0, 0}; public static void main (String [] args) lève une exception {pour (int i = 0; i <aa.length * bb.length * cc.length; i ++) {System.out.print (aa [compteur [0]]); System.out.print ("/ t"); System.out.print (bb [compteur [1]]); System.out.print ("/ t"); System.out.print (cc [compteur [2]]); System.out.println (); poignée(); }} public static void handle () {compter [contre-index] ++; if (COMPREND [contre-index]> = xyz [contre-index] .length) {compteur [contre-ininx] = 0; contre-index--; if (counterIndex> = 0) {handle (); } counterIndex = xyz.length - 1; }}}Sortie 2 * 3 * 4 = 24 lignes au total:
AA1 BB1 CC1AA1 BB1 CC2AA1 BB1 CC3AA1 BB1 CC4AA1 BB2 CC1AA1 BB2 CC2AA1 BB2 CC3AA1 BB2 CC4AA1 BB3 CC1AA1 BB3 CC2AA1 BB3 CC3AA1 CC1AA2 BB1 CC2AA2 BB1 CC3AA2 BB1 CC4AA2 BB2 CC1AA2 BB2 CC2AA2 BB2 CC3AA2 BB2 CC4AA2 BB3 CC1AA2 BB3 CC3AA2 BB3 CC4
Récemment, j'ai rencontré une exigence d'algorithme de produit cartésien. Par exemple, le paramètre passé est "1,3,6,7 == 4,5,8,9 == 3,4 == 43,45,8,9 == 35,4", et la liste retournée est, telle que [1,4,3,43,35] [1,4,3,43,4] [1,4,3,45,35] ..., la liste contient 4 * 4 * 2 * 2 = 256 elselets. L'idée actuelle est la suivante:
Importer java.util.arraylist; import java.util.arrays; import java.util.list; public classe descartestest {/ ** * Obtenez le produit cartésien de n sets * * Description: Si la chaîne passée est: "1,2,3 == 5,6 == 7,8" *, [7], [7] a = [1, 2, 3] * b = [5, 6] * c = [7, 8] * Les tailles sont: a_length = 3, b_length = 2, c_length = 2, * La taille totale de la liste cible est: totalSize = 3 * 2 * 2 = 12 * Pour chaque sous-ensemble A, b, c, le nombre de boules = nombre total de enregistrements / (nombre d'éléments * Dans A, le nombre de boucles = nombre total d'enregistrements / (nombre d'éléments * Nombre de produits cartésiens de l'ensemble ultérieur) = 12 / (3 * 4) = 1 fois, le nombre de fois que chaque élément est imprimé par boucle: le nombre de produits cartésiens de l'ensemble suivant = 2 * 2 * Pour chaque élément en b, le nombre de boucles = nombre total de dossiers / (Nombre d'éléments * Numéro de produits de cartes de cartes) 12 / (2 * 2) = 3 fois, le nombre de fois chaque boucle est imprimée par élément: le nombre de produits cartésiens de l'ensemble suivant = 2 * Nombre de fois en boucle pour chaque élément en C = nombre total de dossiers / (nombre d'éléments * Nombre de produits cartésiens de l'ensemble suivant) Résultat en cours: * [[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] D'après le résultat, nous pouvons voir: chaque élément dans un élément, dans l'élément, dans le résultat de la suite, nous pouvons voir: chaque élément dans l'élément, dans l'élément, dans le résultat du résultat, nous pouvons voir: chaque élément dans un élément, dans le résultat de l'élément dans le résultat de la suite, nous sommes Boucle par élément 3 fois, chaque élément en boucle C par élément 6 fois, à chaque fois, imprimez 1 * * @param args * / public static void main (String [] args) {// TODO Méthode générée automatiquement Stub String str = "1,3,6,7 == 4,5,8,9 == 3,4 == 43,45,8,9 == 35,4"; List <string> result = descartes (str); System.out.println (résultat); } @SuppressWarnings ("RawTypes") Public Static List <string> descartes (String str) {String [] list = str.split ("=="); List <Sist> strs = new ArrayList <Sist> (); for (int i = 0; i <list.length; i ++) {str.add (arrays.aslist (list [i] .split (","))); } System.out.println (STRS); int total = 1; for (int i = 0; i <str.size (); i ++) {total * = str.get (i) .size (); } String [] mySesult = new String [Total]; int maintenant = 1; // le nombre d'impressions par élément int itemloopnum = 1; // le nombre total de boucles par élément int lOopPeritem = 1; for (int i = 0; i <str.size (); i ++) {list temp = str.get (i); maintenant = maintenant * temp.size (); // La valeur d'index du tableau cible est int index = 0; int CurrentSize = temp.Size (); itemloopnum = total / maintenant; loopperitem = total / (itemloopnum * CurrentSize); int myindex = 0; pour (int j = 0; j <temp.size (); j ++) {// Le nombre total de boucles par élément est pour (int k = 0; k <loopperitem; k ++) {if (myIndex == temp.size ()) myIndex = 0; // le nombre d'impressions pour chaque élément par boucle pour (int m = 0; m <itemloopnum; m ++) {mysseult [index] = (mysseult [index] == null? "": Mysseult [index] + ",") + ((string) temp.get (myIndex)); index ++; } MyIndex ++; }}} return arrays.aslist (mySesult); }}Exécuter la sortie du résultat:
[[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,8,8,4, 1,8,8,4, 1,3,8,8,8,4, 1,8,8,4, 1,3,8,8,8,4, 1,8,8,4, 1,3,3,8,8,4, 1,8,8,4, 1,3,3,8,8,4, 1,8,8,8 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,3,3,4, 1,8,3,9,35, 1,8,3,3,3,3 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,4,4, 1,9,3,43,4, 1,9,3,4, 1,9,3,43,4, 1,9,3,43,4, 1,9,3,43,4, 1,9,3,43,4, 1,9,3,43,4, 1,9,3,43 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,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,4,4,3,3,4,3,4,4,3,4,4,4,3,35 ,,4,3,4,4,3,4,4,4,3,35 ,,4,3,4,4,3,4,4,4 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,4,3,4,4,4,4,3,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,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,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,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,45, 4, 3,8,3,8,35, 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 , 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,355, 6,4,4,4,4,4,4,4,3,355, 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,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,3,8,4, 6,5,3,45,4,6,6 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,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,8, 6,8,3,8, 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,45, 6,9,3,43,4, 6,9,3,45, 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 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,4, 7,4,3,9,4, 7,4,3,3,4, 7,4,3,9,4, 7,4,3,3,4, 7 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,43,4,7,4,4,45,35, 7,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,45,4, 7,5,4,8,35, 7,5,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,4,9,4,9,4,9,4]
Algorithme récursif:
public static void fn (list <string []> list, string [] arr, String str) {// iterete list list <string> li = new ArrayList <string> (); for (int i = 0; i <list.size (); i ++) {// Obtenez le tableau actuel if (i == list.indexof (arr)) {// itérater le array system.out.println (arr.length); pour (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); }}}} pour (int i = 0; i <li.size (); i ++) {System.out.println (li.get (i)); }}Pour plus d'informations sur les algorithmes Java, les lecteurs qui sont intéressés par ce site peuvent afficher les sujets: "Structure de données Java et tutoriel d'algorithme", "Résumé des conseils de nœud de Dom Operation Java", "Résumé du fichier Java et des conseils d'opération de répertoire" et "Résumé des conseils d'opération Java Cache"
J'espère que cet article sera utile à la programmation Java de tous.