배열 및 조합 알고리즘은 널리 사용되며 마스터해야합니다. 임계 값을 낮추기 위해이 기사는 주로 알고리즘의 논리와 단순성에 중점을 두지 만 알고리즘 효율에주의를 기울이지 않습니다. 온라인 도서와 자체 요구의 구현을 결합하면 여기에는 네 가지 목표가 있습니다.
1. 모든 요소의 전체 배열 : AB의 전체 배열은 AB, BA (주문 관련);
2. 모든 요소의 전체 조합 : AB의 전체 조합은 a, b, ab (순서 관련이 없음);
3. N 요소 중에서 M 요소를 선택하는 조합이 무엇인지 알아보십시오. ABC의 2 가지 요소의 조합은 AB, AC, BC입니다.
4. N 요소 중에서 M 요소를 선택하기위한 배열이 무엇인지 알아보십시오. ABC에서 2 개의 요소를 선택하기위한 배열은 AB, BA, AC, CA, BC, CB;
n 요소들 중에서 m 요소를 선택하는 배열을 찾은 후에, 우리는 실제로 n 요소들 중에서 m 요소를 선택하는 조합 방법을 찾은 후 각 조합으로 구성된 요소 세트 (배열)를 조립 함수이므로 예제는 나열되지 않습니다. 다른 세 가지 목표는 코드를 참조하십시오.
공개 최종 클래스 PembutationCombinationHolder { / ** 배열 요소의 전체 조합* / static void 조합 (char [] chars) {char [] subchars = new char [chars.length]; // 하위 복합 데이터를 저장하는 배열 // 전체 조합의 문제는 모든 요소에서 1 개의 요소를 선택하는 것입니다 (n으로 표시) 2 개 요소의 조합과 (int i = 0; i <chars.length; ++ i) {최종 int m = i +1; 조합 (chars, chars.length, m, subchars, m); }} /*** n 요소와 n 요소의 조합 구현. 원칙은 다음과 같습니다. * 뒤에서 앞에서 선택하고 위치 I을 선택한 다음 첫 번째 I-1에서 M-1을 선택하십시오. * 예를 들어 : 3 요소가 1, 2, 3, 4, 5에서 선택됩니다. * 1) 5를 선택한 후 처음 4에서 2를 선택한 후 처음 4에서 2를 선택하는 것은 또 다른 하위 프로 블럼입니다. * 2) 5를 포함하지 않으면 4를 직접 선택한 다음 처음 3에서 2를 선택하고 처음 3 개 중 2 개를 선택하는 것은 또 다른 하위 문제입니다. * 3) 4를 포함하지 않으면 3을 직접 선택한 다음 처음 2에서 2를 선택하고 처음 2에서 2 개만 선택하십시오. * 수직 방향을 보면 1과 2와 3은 루프에 대한 A가 발생하며 최종 값은 5이고 최종 값은 m입니다. * 수평 방향을 보면,이 문제는 첫 번째 I-1에서 M-1의 재귀입니다. */static void 조합 (char [] chars, int n, int m, char [] subchars, int subn) {if (m == 0) {// (int i = 0; i <subn; ++ i) {system.out.print (subchars [i]); } system.out.println (); } else {for (int i = n; i> = m; --i) {// 하위 차기 [m -1] = chars [i -1]; // 조합을 선택합니다 (char, i -1, m -1, subchars, subn); // 재귀}}}}}}}}/ ** 배열 요소의 전체 순열*/ static void Pembutation (char [] chars) {순열 (chars, 0, chars.length -1); } /** 인덱스에서 인덱스로부터의 배열에서의 서브 어레이 어레이는 전체 순열에 참여합니다* /정적 무효 순열 (char [] chars, int begin, int end) {if (begin == end) {// 종료는 마지막 문자 만 남겨질 때입니다 (int i = 0; i <chars.length; ++ i) {system.out.print (chars [i]); } system.out.println (); } else {for (int i = begin; i <= end; ++ i) {// 각 문자는 첫 번째 if (canswap (chars, begin, i))에 고정되어 있습니다. // 순열 스왑 (chars, begin + 1, end); // 하위 배열 스왑의 전체 순열을 재귀 적으로 찾습니다 (chars, begin, i); // restore}}}}} static void swap (char [] chars, int from, int to) {char temp = chars [from]; chars [from] = chars [to]; 숯 [to] = 온도; } 정적 부울 canswap (char [] chars, int begin, int end) {for (int i = begin; i <end; ++ i) {if (chars [i] == chars [end]) {return false; }} true를 반환합니다. } public static void main (string [] args) {final char [] chars = new char [] { 'a', 'b', 'c'}; 순열 (chars); System.out.println("====================================================== System.out.out.println(chars); }}위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.