티스토리 뷰
반응형
. 순열
서로 다른 n개의 원소 중에서 "중복을 허락하지 않고", "순서를 생각"하며 r개를 일렬로 나열하는 수열
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // 지정된 자리에 순열 뽑기 // cnt : 현재까지 뽑은 순열의 수 private static void permusation(int cnt) { // R개를 모두 골랐다면 if(cnt == R) { System.out.println(Arrays.toString(numbers)); return; } for (int i = 0; i < N; i++) { // 중복 확인 if (isSelected[i]) continue; numbers[cnt] = input[i]; // 해당숫자 사용해보기 isSelected[i] = true; // 해당숫자 사용 처리 permusation(cnt + 1); // 다음 자리 순열 뽑기 isSelected[i] = false; // 해당숫자 사용하지 않기 } } | cs |
. 중복 순열
중복을 허락"하며 "순서를 생각"
1 2 3 4 5 6 7 8 9 10 11 12 | private static void permusation2(int cnt) { if(cnt == R) { System.out.println(Arrays.toString(numbers)); return; } for (int i = 0; i < N; i++) { numbers[cnt] = input[i]; // 해당숫자 사용 permusation(cnt + 1); // 다음 자리 순열 뽑기 } } | cs |
. 조합
중복을 허락하지 않으며" "순서를 생각하지 않고"
nCr = n! /
r! * (n-r)!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /** * 지정된 자리에 조합수 뽑기 * * @param cnt 현재까지 뽑은 조합수의 개수 * @param start 조합에 시작점으로 시도할 인덱스 */ private static void combination(int cnt, int start) { if (cnt == R) { System.out.println(Arrays.toString(numbers)); return; } // 현자리에 시작위치 수부터 끝위치 수까지 시도 for (int i = start; i < N; i++) { numbers[cnt] = input[i]; combination(cnt + 1, i + 1); } } | cs |
. 중복 조합
중복을 허락"하여 "순서를 생각하지 않고"
1 2 3 4 5 6 7 8 9 10 11 12 | private static void combination2(int cnt, int start) { if (cnt == R) { System.out.println(Arrays.toString(numbers)); return; } // 현자리에 시작위치 수부터 끝위치 수까지 시도 for (int i = start; i < N; i++) { numbers[cnt] = input[i]; combination(cnt + 1, i); } } | cs |
. 부분집합
집합의 원소가 N개일 때, 공집합을 포함한 부분집합의 수는 2^N개
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public static void generateSubset(int cnt) { if(cnt == N) { for (int i = 0; i < N; i++) { System.out.print(isSelected[i] ? input[i] : "X"); System.out.print("\t"); } System.out.println(); return; } // 부분집합 구성에 포함 isSelected[cnt] = true; generateSubset(cnt + 1); // 다음 원소로 넘어감 // 부분집합 구성에 미포함 isSelected[cnt] = false; generateSubset(cnt + 1); // 다음 원소로 넘어감 } | cs |
* 참고
출처 : http://blog.naver.com/ao9364/220516757923
반응형
'PS > Algorithm' 카테고리의 다른 글
[Algorithm] 그래프 알고리즘 비교(MST, kruskal, prim, dijkstra, floyd-warshall, bellman-ford) (0) | 2020.10.13 |
---|---|
[Math] 코딩테스트에 나오는 수학 정리(정수론 : 공약수/공배수, 에라토스테네스의 체..) (0) | 2020.06.10 |
[Algorithm] 위상정렬(그래프 정렬) (0) | 2020.06.02 |
[Algorithm] 가방문제(냅색 알고리즘, knapsack algorithm) (7) | 2020.06.01 |
[Algorithm] 최대 부분 증가수열(DP, LIS : Longest Increasing Subsequence) (0) | 2020.05.28 |
댓글