В этой статье описываются принципы и методы реализации алгоритма интеграции Java. Поделитесь этим для вашей ссылки, следующим образом:
Внедрение Java Алгоритма декартового продукта:
(1) В цикле только один столбец перемещается по одной ячейке за раз, что является столбцом, на который указывает контриндекс.
(2) Если столбец достигает хвоста, индекс этого столбца сбрасывается до 0, а контриндекс указывает на предыдущий столбец, который эквивалентен переносу, добавляя один из индекса предыдущего столбца.
(3) Наконец, количество сгенерированных строк контролируется для выхода из петли.
открытый тест класса {частная статическая строка [] aa = {"aa1", "aa2"}; частная статическая строка [] bb = {"bb1", "bb2", "bb3"}; частная статическая строка [] cc = {"cc1", "cc2", "cc3", "cc4"}; частная статическая строка [] [] xyz = {aa, bb, cc}; private static int contrindex = xyz.length - 1; private static int [] counter = {0, 0, 0}; public static void main (string [] args) бросает исключение {for (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 [счетчик [1]]); System.out.print ("/T"); System.out.print (cc [счетчик [2]]); System.out.println (); ручка(); }} public static void handle () {counter [counterindex] ++; if (counter [counterindex]> = xyz [contrindex] .length) {counter [counterindex] = 0; Контриндекс-; if (contrindex> = 0) {handle (); } contrindex = 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 cc2aa1 bb3 cc3aa1 bb3 cc4aa2 bb1 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,43,35] [1,4,3,43,4] [1,4,3,45,35]. Текущая идея заключается в следующем:
Импорт java.util.arraylist; import java.util.arrays; import java.util.list; открытый класс Decartestest { /** * Получить картезианский продукт n наборов * * Описание: если передача: "1,2,3 == 5,6 == 7,8" * конвертируется в строковую массив как: [1, 2, 3], [7], 6], 8, *, *, *, *, 8, *, 8, 8, *, *, 8, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, *, * 8, * 8,8 " *. a = [1, 2, 3] * b = [5, 6] * c = [7, 8] * Размеры: a_length = 3, b_length = 2, c_length = 2, * Общий размер целевого списка: totalsize = 3 * 2 * 2 = 12 * для каждого подмножества a, b, c, число петлей = численные элементы, число из элементов, числа elements * Номер * Номер * Номерные. В a количество циклов = общее количество записей/(количество элементов*Количество декартовых продуктов последующего набора) = 12/(3*4) = 1 время, количество раз каждый элемент печатается на цикл: количество декартовых продуктов последующего набора = 2*2*Для каждого элемента в B, количество петлей = общее количество записей/(число элементов*числа картзионов -наборов). 12/(2 * 2) = 3 раза, количество раз каждый цикл печатается для каждого элемента: количество декартовых продуктов последующего набора = 2 * Количество разглаголь Результат бега: * [[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] из -за этого, каждая из элементов, каждая из элементов, каждая из элементов. Цикл за элемент 3 раза, каждый элемент в цикле C на элемент 6 раз, каждый раз, печатайте 1 * * @param args */ public static void main (string [] args) {// todo автоматически генерированный метод String String str = "1,3,6,7 == 4,5,8,9 == 3,4 == 43,45,8,9 == 35,4"; Список <string> result = decartes (str); System.out.println (результат); } @Suppresswarnings ("ravtypes") public static list <string> decartes (string str) {string [] list = str.split ("=="); Список <List> strs = new ArrayList <sist> (); 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 сейчас = 1; // количество отпечаток на элемент int itemloopnum = 1; // общее количество петлей на элемент int loopperitem = 1; for (int i = 0; i <strs.size (); i ++) {list temp = strs.get (i); Теперь = теперь*temp.size (); // Значение индекса целевого массива является int index = 0; int currentsize = temp.size (); itemloopnum = total/now; loopperitem = total/(itemloopnum*currentsize); int myindex = 0; for (int j = 0; j <temp.size (); j ++) {// Общее количество циклов на элемент для (int k = 0; k <loopperitem; k ++) {if (myindex == temp.size ()) myindex = 0; // количество отпечаток для каждого элемента на цикл для (int m = 0; m <itemloopnum; m ++) {mysesult [index] = (mysesult [index] == null? "": Mysesult [index]+",")+((строка) temp.get (myindex)); index ++; } myIndex ++; }}} return arrays.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,3,4,4, 1,4,3,9,35, 1,4,3,9,4, 1,4,43,35, 1,4,4,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, 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,43,4, 1,5,4,45,45,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,45,5,5,5,5,5,5,5,5,5,45,45,45,45, 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,3,45, 1,8,3,8,4,4,8,8,3,3,8,3,3,3,3,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8,8,4,4,8,3,3,3,3,3,3,3,3,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,9,35, 1,8,3,9,35, 1,8,3,9,9,35, 1,8,3,9,35, 1,3,9,35, 1,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,9,3,9,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,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,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,3,4,4,4,4,4,3,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,8,35,35,35,35,35,35,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, 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,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,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,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,35, 35,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,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,5,5,3,45, 6,5,3,45,4,5,5,5,45,3,45, 6,5,5,5,3,3,45, 6,5,3,45,4,5,5,4,45,45,3,3, 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,4,4, 6,5,4,4,35, 6,5,4,4,4,4,4,4,4,4,4,4,4,4,4,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,4,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,, 6,8,3,8,4, 6,8,3,9,35, 6,8,3,9,4,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,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,43,43,43,43,43, 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,45,45,45,45,45,3,45,45,45,45,3,45,45,45,3,45,45,45,45,45,45,45, 6,45,45,45,45,45,45,45,45,45, 6,9,3, 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,45,45,45,45,45,3,45,45,45,45,3,45,45,45,3,45,45,45,45,45,45,45, 6,45,45,45,45,45,45,45,45,45, 6,9,3, 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,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,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,8,4, 7,4,3,9,35, 7,4,3,9,4, 7,4,4,43,35, 7,4,43,4,4,4,45,45,45,45,45,45, 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,9,35, 7,4,4,9,35, 7,4,4,9,4,7,5,5,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, 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,43,4, 7,5,4,45,35, 7,5,45,4,4,4,4,4,4,45,45, 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,3,43,4, 7,8,3,43,4, 7,8,3,3,45, 7,8,3,45, 7,3,3,45, 7,3,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,45, 7,8,4,4,8,9,9,35, 7,8,4,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,4,4,4,4,4,4,4,4,4,4,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,4, 7,8,4,9,35, 7,8,4,4, 7,8,4,9,35, 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,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, 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,4, 7,9,4,8,35, 7,9,4,9,4,9,9,9,9,9,9,4,9,4,9,4,9,4,9,9,9,9,9,4,9,9,9,4,9,4,9,9,9,9,9,4,9,9,4,9,9,9,9,9,9,9,4,9,9,4,9,9,
Рекурсивный алгоритм:
public static void fn (список <string []> list, string [] arr, string str) {// list list <string> li = new ArrayList <string> (); for (int i = 0; i <list.size (); i ++) {// Получить текущий массив if (i == list.indexof (arr)) {// itate the Array 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); }}}} for (int i = 0; i <li.size (); i ++) {System.out.println (li.get (i)); }}Для получения дополнительной информации об алгоритмах Java, читатели, которые заинтересованы в этом сайте, могут просмотреть темы: «Учебное пособие по структуре данных Java и алгоритм», «Сводка операции Java Dom Node», «Сводка Java File и каталог
Я надеюсь, что эта статья будет полезна для всех Java Programming.