임의의 집합 data에 대해서 원소들의 모든 가능한 순열을 출력하라
data = {a,b,c,d}
4! = 24개
a b c d
a b d c
a c b d
a d b c
. . . .
a를 고정 - b,c,d의 모든 순열에 a를 앞에 추가하여 출력
b를 고정 - a,c,d의 모든 순열에 b를 앞에 추가하여 출력
. . . .
a,b를 고정 - c,d의 모든 순열에 a,b를 앞에 추가하여 출력
. . .
a,b,c를 고정 - d에 a,b,c를 앞에 추가하여 출력
void printPerm(a prefix string, a set S)
{
if S is 0
print the pre fix string;
else
for each element x in S
printPerm(the prefix string + x, S-{x});
}
S의 모든 순열들을 생성한 후 각각에 prefix String을 앞에 붙여서 출력한다.
int data[] = {'a','b','c','d'};
int n = 4;
void perm(int k) {
if(k==n) {
print data[0...n-1];
return;
}
for(int i=k; i<n; i++) {
swap(data, k, i);
perm(data, k+1; n);
swap(data, k, i);
}
}
perm이라는 함수의 미션은 매개변수 k를 받아서 data[a..k-1]prefix로 정하고 data[k..n]으로 만들수 있는 모든 순열을
프린트하되, 배열 data에 저장된 값들의 순서는 그대로 유지한다.
멱집합(순서무관)과 순열 나열(순서상관)의 응용
배낭문제
-무게와 가격이 정해진 n개의 아이템과 용량이 w이 배낭이 있다.
배낭의 용량을 초과하지 않으면서 가격의 합이 최대가 되도록 아이템을 배낭에 넣으려면?
TSP
- 서울 대전 대구 부산 광주 강릉 속초 등의 n개의 도시들이 있을때
한 도시에서 출발하여 모든 도시들을 지나서 다시 집으로 돌아올때 방문 순서에따라
이동 거리가 달라지는데 길이가 가장 짧은 투어를 고르는 문제.
'알고리즘 with 자바 > 알고리즘' 카테고리의 다른 글
문자열 자르기 관련 함수 (0) | 2022.04.25 |
---|---|
멱집합 (0) | 2021.09.13 |
Recursion의 응용 : n queen problem (0) | 2021.09.09 |
Recursion의 응용 : Counting Cells in a Bob (0) | 2021.09.09 |
Recursion의 개념과 기본 예제들 3 (0) | 2021.09.08 |