조합 알고리즘(Combination)
조합
순열과 비슷하나 순서는 신경쓰지않는다.
ex) [1,2,3][3,2,1] 은 같은 수열이다.
소스
import java.util.LinkedList;
public class Perm {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
int n = arr.length;
//조합 (순서 관심 없고 뽑은 유무만 생각)
System.out.println("\n조합");
for (int i = 1; i <= n; i++) {
int[] comArr = new int[i];
combination(comArr, n, i, 0, 0, arr);
}
}
//조합 (순서 관심 없고 뽑은 유무만 생각)
private static void combination(int[] comArr, int n, int r, int index, int target, int[] arr) {
if (r == 0) {
for (int i : comArr) {
System.out.print(i + " ");
}
System.out.println();
return;
}
if (target == n) {
return;
}
comArr[index] = arr[target];
combination(comArr, n, r - 1, index + 1, target + 1, arr); //뽑는 경우
combination(comArr, n, r, index, target + 1, arr); //안 뽑는 경우
}
}
import java.util.LinkedList;
public class Perm {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
int n = arr.length;
//중복 조합 (순서 관심 없고 뽑은 유무만 생각 + 자기 자신도 포함)
System.out.println("\n중복조합");
for (int i = 0; i <= n; i++) {
int[] reComArr = new int[i];
reCombination(reComArr, n, i, 0, 0, arr);
}
}
//중복 조합 (순서 관심 없고 뽑은 유무만 생각 + 자기 자신도 포함)
private static void reCombination(int[] reComArr, int n, int r, int index, int target, int[] arr) {
if (r == 0) {
for (int i : reComArr) {
System.out.print(i + " ");
}
System.out.println();
return;
}
if (target == n)
return;
reComArr[index] = arr[target];
reCombination(reComArr, n, r - 1, index + 1, target, arr);//뽑는 경우
reCombination(reComArr, n, r, index, target + 1, arr);//안 뽑는 경우
}
}
Author And Source
이 문제에 관하여(조합 알고리즘(Combination)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@away0419/조합-알고리즘Combination저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)