Backtracking
Backtracking 개념
여러 가지 선택지들이 존재하는 상황에서 한가지를 선택
선택이 이루어지면 새로운 선택지들의 집합이 생성됨
이런 선택을 반복하면서 최종 상태에 도달
올바른 선택을 계속하면 목표 상태(goal state)에 도달한다!
Backtracking과 DFS의 차이
어떤 node에서 출발하는 경로가 해결책으로 이어질 것 같지 않으면 더 이상 그 경로를 따라가지 않음으로써 시도의 횟수를 줄임
Prunning (가지치기)
DFS가 모든 경로를 추적하는데 비해 Backtacking은 불필요한 경로를 조기에 차단함
DFS를 하기에는 경우의 수가 너무 많을 때
N! 가지의 경우의 수를 가진 문제에 대해 DFS를 하면 처리 불가능하다
Back Tracking 알고리즘을 적용하면 일반적으로 경우의 수가 줄어들지만, 이 역시 최악의 경우에는 여전히 지수함수 시간 (Exponential Time)을 요하므로 처리 불가능
Root node에서 Leaf node 까지의 경로는 해답 후보 (candidate solution)가 되는데, DFS를 하여 그 해답 후보 중에서 해답을 찾을 수 있음
but, 이 방법을 사용하면 해답이 될 가능성이 전혀 없는 node의 자식 node (descendant) 들도 모두 검색해야 하므로 비효율적
Backtracking 기법
어떤 node의 유망성을 점검한 후에 유망(promising) 하지 않다고 결정되면 그 node의 부모로 되돌아가서 (
backtracking
) 다음 자식 node로 감어떤 node를 방문하였을 때
그 node를 포함한 경로가 해답이 될 수 없으면 그 node는 유망하지 않다고 함
해답이 가능성이 있으명 유망하다고 함
가지치기 (prunning)
: 유망하지 않은 node가 포함된 경로는 더 이상 고려하지 않는다
Backtracking을 이용한 알고리즘의 절차
상태 공간 트리의 DFS (깊이 우선 검색)을 실시한다
각 node가 유망한지를 점검한다
만일 그 node가 유망하지 않으면, 그 node의 부모 node로 돌아가서 검색을 계속한다
N-Queen 문제
SWEA 2806
Subset
부분집합 구하기
ex)
Space State Tree를 구축하여 문제 해결하기
Backtracking을 이용하여 순열 구하기
접근 방법은 부분집합 구하는 방법과 유사
ex)
Last updated