SMALL
백트래킹
해를 찾는 도중에 막히면 되돌아가서 해를 다시 찾는 기법
- 상태 공간 트리에 대한 깊이 우선 탐색 실시
- 방문하는 노드가 유망한지 여부 점검
- 만일 선택한 노드가 유망하지 않을 경우, 해당 노드의 부모 노드로 돌아가서 검색 계속 진행
최적화 문제와 결정 문제를 해결할 수 있음
| 결정 문제 | 문제의 조건을 만족하는 해가 존재하는지를 yes/no로 답하는 문제 | 미로찾기, n-Queen, Map coloring, 부분 집합의 합 문제 등 |
| 최적화 문제 | 문제의 조건을 만족하는 최대/최소 해를 찾는 문제 | 미로찾기에서 최단경로 문제, 원소의 개수가 최대인 부분 집합을 찾는 문제 |
상태 공간 트리
- 해를 찾기 위한 선택의 과정을 트리로 표현
- 트리의 내부 노드는 최종 상태로 가는 중간 상태를 나타냄
- 트리의 단말 노드는 하나의 후보해에 대한 최종 상태가 됨
- 상태 공간 트리를 탐색하는 것은 모든 후보해들을 탐색하는 것
- 트리를 깊이 우선 탐색하는 방법이 백트래킹 알고리즘의 기본 형태
백트래킹과 깊이 우선 탐색과의 차이
| 백트래킹 기법 | 깊이 우선 탐색 |
| - 어떤 노드에서 출발하는 경로가 해결책으로 이어질 것 같지 않으면 더 이상 가지 않음 - 가지치기로 불필요한 경로 조기에 차단 - 일반적으로 경우의 수가 줄어들지만, 최악의 경우 지수함수 시간을 필요로 함 |
- 모든 경로 추적 - 경우의 수가 너무 많은 경우 처리 불가능 - N! 가지의 경우의 수 문제는 처리 불가능 |
일반적인 백트래킹 알고리즘 절차(수도 코드)
def checknode(v):
if promising(v):
if there is a solution at v:
write the solution
else:
for u in each child of x:
checknode(u) # 재귀호출
백트래킹 문제 예시
n-Queen 문제

동전 거스름돈 문제

'CS study > Algorithm' 카테고리의 다른 글
| 6. 그래프 탐색 - DFS,BFS (0) | 2021.09.01 |
|---|---|
| 5. 그리디 알고리즘 (0) | 2021.08.30 |
| 3. 완전검색, 분할정복 (0) | 2021.08.26 |
| 2. 부분집합, 순열, 조합 (0) | 2021.08.12 |
| 1. 정렬 알고리즘 (0) | 2021.08.11 |
댓글