Anordnung und Kombinationsalgorithmen werden häufig verwendet und müssen gemeistert werden. Um den Schwellenwert zu senken, konzentriert sich dieser Artikel hauptsächlich auf die Logik und Einfachheit des Algorithmus, achtet jedoch nicht auf die Algorithmus -Effizienz. Die Kombination der Implementierung in Online -Büchern und ihren eigenen Bedürfnissen gibt es hier vier Ziele:
1. VOLLSTÄNDIGE ARHALTUNG aller Elemente: Die volle Anordnung von AB ist AB, BA (Order verwandt);
2. Volle Kombination aller Elemente: Die volle Kombination von AB ist A, B, AB (irrelevant);
3. Finden Sie heraus, welche Kombinationen bei der Auswahl von M -Elementen zwischen N -Elementen sind: Die Kombination von 2 Elementen in ABC ist AB, AC, BC;
V.
Es ist festzustellen, dass wir nach der Ermittlung der Anordnung der Auswahl von M -Elementen zwischen N -Elementen tatsächlich den Satz von Elementen (Arrays) anordnen, die aus jeder Kombination bestehen, nachdem die Kombination zur Auswahl von M -Elementen zwischen N -Elementen gefunden wurde, sodass es eine Montagefunktion ist und die Beispiele nicht aufgeführt sind. Für die anderen drei Ziele finden Sie den Code:
öffentliche endgültige Klasse PermutationCombinationspolyer { / ** Vollkombination von Array -Elementen* / statische Void -Kombination (char [] chars) {char [] subchars = new char [chars.length]; // Arrays, die Subcombinationsdaten speichern // Das Problem der gesamten Kombination besteht darin, 1 Element aus allen Elementen (als n) zu wählen, plus die Kombination von 2 Elementen ... plus die Summe der Kombination von n -Elementen für (int i = 0; i <charsgth; ++ i) {endgültig int m = i +1; Kombination (Zeichen, Chars.length, M, Subchars, M); }} /*** Implementierung der Kombination von N -Elementen mit N -Elementen. Das Prinzip lautet wie folgt: * Wählen Sie von hinten nach vorne die Position I und wählen Sie dann M-1 im ersten I-1. * Zum Beispiel: 3 Elemente werden aus 1, 2, 3, 4, 5. * 1) nach der Auswahl 5, dann 2 in den ersten 4 ausgewählt und in den ersten 4 ausgewählt und ist ein weiteres Unterproblem, nur rekursiv; * 2) Wenn Sie nicht 5 enthalten, wählen Sie 4 direkt aus, wählen Sie 2 in den ersten 3 aus und die Auswahl von 2 in den ersten drei ist ein weiteres Unterproblem, nur rekursiv; * 3) Wenn Sie nicht 4 enthalten, wählen Sie 3 direkt, dann 2 in den ersten 2 und in der ersten 2. nur zwei. * In der horizontalen Richtung ist dieses Problem eine rekursive M-1 im ersten I-1. */statische Void -Kombination (char [] chars, int n, int m, char [] subchars, int subn) {if (m == 0) {// exportieren für (int i = 0; i <subn; ++ i) {System.out.print (subchars [i]); } System.out.println (); } else {für (int i = n; i> = m; --i) {// SubChars [m - 1] = chars [i - 1]; // eine Kombination auswählen (Zeichen, i - 1, m - 1, subchars, subn); // M-1 aus dem ersten I-1 für Rekursion}}}}/ ** Vollständige Permutation von Array-Elementen*/ statische Leerepermutation (char [] chars) {Permutation (chars, 0, chars.length-1); } /** Subarrays im Array aus dem Index beginnen zu indexieren end in vollständige Permutation* /static void Permutation (char [] chars, int begin, int end) {if (begin == end) {// Der Ausgang ist, wenn nur der letzte Zeichen für (int i = 0; i <chars.length; } System.out.println (); } else {für (int i = begin; i <= end; ++ i) {// Jedes Zeichen wird auf das erste if if if ifle behoben (canswap (chars, begin, i)) {// deduplicate swap (chars, begin, i); // Permutation tauschen (Chars, beginnen + 1, Ende); // Finden Sie rekursiv die volle Permutation des Sub-Array-Tauschs (Chars, beginnen, i); // restore}}}}} statischer void Swap (char [] chars, int von, int to) {char temp = chars [von]; chars [von] = chars [zu]; Zeichen [zu] = temp; } statische boolean canswap (char [] chars, int begin, int end) {für (int i = begin; i <end; ++ i) {if (chars [i] = chars [end]) {return false; }} return true; } public static void main (String [] args) {endgültig char [] chars = new char [] {'a', 'b', 'c'}; Permutation (Chars); System.out.println ("===================================================== -out.out.println (Chars);}}}}}}}}}}}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.