В этой статье описывается декартовый продукт Java, внедряющий коллекцию неизвестных измерений на основе рекурсии и цикла. Поделитесь этим для вашей ссылки, следующим образом:
Что такое картезианский продукт?
В математике декартовый продукт двух наборов X и Y, также известный как прямой продукт, выражается как x × y, первый объект является членом X, а второй объект - одна из всех возможных упорядоченных пар Y.
Предполагая, что установлено a = {a, b} и установить b = {0,1,2}, то декартовое произведение двух наборов составляет {(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}.
Как использовать алгоритмы программы для реализации картезианского продукта?
Если количество наборов известно перед программированием, картезианский продукт можно получить с помощью нескольких петель программы. Но если вы не знаете количество подборов перед программированием, как вы можете получить картезианский продукт? Например, коллекция представляет List < List<String>> list ; Количество списков перед программированием неизвестно. Следующий код использует два метода рекурсии и цикла для реализации декартового произведения неизвестных наборов измерений:
Импорт java.util.arraylist; import java.util.arrays; import java.util.list;/*** Два способа реализации декартового продукта неизвестных наборов измерений*, созданных на 2015-05-22* @author luweijie*/public class decartes {/** ** Recursibulate реализующе реализовать продукт Cartesian в DIMVALU DIMVALUE RAW DATA* @param Результаты результата данных* @param слоя dimvalue Количество слоев* @param curlist Результат каждого декартового продукта*/ private static void recursive (list <string >> dimvalue, list <string >> result, int layer, list> curlist) {if (layer <dimvalue.size () (dimValue.get (layer) .size () == 0) {рекурсивный (dimValue, результат, слой + 1, curlist); } else {for (int i = 0; i <dimvalue.get (layer) .size (); i ++) {list <string> list = new ArrayList <string> (curlist); list.add (dimvalue.get (layer) .get (i)); рекурсивный (dimvalue, результат, слой + 1, список); }}} else if (layer == dimvalue.size () - 1) {if (dimvalue.get (layer) .size () == 0) {result.add (curlist); } else {for (int i = 0; i <dimvalue.get (layer) .size (); i ++) {list <string> list = new ArrayList <string> (curlist); list.add (dimvalue.get (layer) .get (i)); result.add (список); }}}} / *** Цикл для реализации картезианского продукта в DimValue, и результат помещается в результат* @param DimValue Raw Data* @param Результаты результата* / частная статическая схема void (список <string >> dimvalue, list <string >> result) {int total = 1; for (list <string> list: dimvalue) {total *= list.size (); } String [] myresult = new String [total]; int itemloopnum = 1; int loopperitem = 1; int сейчас = 1; for (list <string> list: dimvalue) {now *= list.size (); int index = 0; int currentsize = list.size (); itemloopnum = total / now; loopperitem = total / (itemloopnum * currentsize); int myindex = 0; for (String String: list) {for (int i = 0; i <loopperitem; i ++) {if (myindex == list.size ()) {myindex = 0; } for (int j = 0; j <itemloopnum; j ++) {myresult [index] = (myresult [index] == null? "": myresult [index] + ",") + list.get (myindex); index ++; } myIndex ++; }}} List <string> stringresult = arrays.aslist (myresult); for (String String: StringResult) {string [] stringArray = string.split (","); result.add (arrays.aslist (stringarray)); }} / *** Запись программы* @param args* / public static void main (string [] args) {list <string> list1 = new ArrayList <string> (); list1.add ("1"); list1.add ("2"); List <string> list2 = new ArrayList <string> (); list2.add ("a"); list2.add ("b"); List <string> list3 = new ArrayList <string> (); list3.add ("3"); list3.add ("4"); List3.Add ("5"); List <string> list4 = new ArrayList <string> (); list4.add ("c"); list4.add ("D"); list4.add ("e"); Список <list <string >> dimValue = new ArrayList <List <string >> (); dimvalue.add (list1); dimvalue.add (list2); dimvalue.add (list3); dimvalue.add (list4); Список <list <string >> recursiverSult = new ArrayList <List <String >> (); // рекурсивно реализует рекурсивные картезианские продукты (DimValue, RecursiverSult, 0, New ArrayList <String> ()); System.out.println («Рекурсивно реализует декартовый продукт: общий" + recursiveresult.size () + "Результаты"); for (list <string> list: recursiveresult) {for (String String: list) {System.out.print (string + ""); } System.out.println (); } List <list <String >> curreshResult = new ArrayList <List <String >> (); Схема (DIMVALUE, CircuesResult); System.out.println ("цикл реализует картезианский продукт: total" + circuitResult.size () + "Результат"); for (list <string> list: curryResult) {for (String String: list) {System.out.print (String + ""); } System.out.println (); }}}Результатом вывода:
Рекурсивно реализуя декартовый продукт: в общей сложности 36 результатов1 A 3 C1 A 3 D1 A 3 E1 A 4 C1 A 4 D1 A 4 E1 A 5 C1 A 5 D1 A 5 E1 B 3 C1 B 3 D1 B 3 E1 B 4 C 4 D1 B 4 E1 B 5 C 5 D1 B 5 E2 A 3 C2 A 3 D 2 A 4 C 4 C 4 C 4 D 4 D 4 D 4 D 4 C 4 C 4 C 4 D 4 C 4 C 4 C 4 D 4 C 4 C 4 C 4 D 4 C 4 C 4 C 4 D 4 C 4 C 4 D 4 C 4 C 4 D 4 D 4 C 4 D 4 C 4 D 4 C 4 D 4 D 4 C 4 D 4 D 4 C 4 D 2 A 4 C 4 C 5 C 5 C 5 C 5 C 5 C 2 A 3 C2 A 5 d2 a 5 e2 b 3 c2 b 3 d2 b 3 e2 b 4 c2 b 4 d2 b 4 e2 b 5 c2 b 5 d2 b 5 e loop implementing the Cartesian product: A total of 36 results1 a 3 c1 a 3 d1 a 3 e1 a 4 c1 a 4 d1 a 4 e1 a 5 c1 a 5 d1 a 5 e1 b 3 c1 b 3 d1 b 3 e1 b 4 c1 b 4 d1 b 4 e1 B 5 C1 B 5 D1 B 5 E2 A 3 C2 A 3 D2 A 3 E2 A 4 C2 A 4 D2 A 4 E2 A 5 C2 A 5 D2 A 5 E2 B 3 C2 B 3 D2 B 3 B 4 C2 B 4 D2 B 4 E2 B 5 B 5 D2 B 5 E
Для получения дополнительной информации об алгоритмах Java, читатели, которые заинтересованы в этом сайте, могут просмотреть темы: «Учебное пособие по структуре данных Java и алгоритм», «Сводка операции Java Dom Node», «Сводка Java File и каталог
Я надеюсь, что эта статья будет полезна для всех Java Programming.