Search

백트래킹(BackTracking)

대분류
CS
소분류
알고리즘
유형
알고리즘
부유형
BFS
DFS
최종 편집 일시
2024/10/27 15:34
생성 일시
2024/07/12 06:29
14 more properties

백트래킹

퇴각 검색
한정 조건을 가진 문제를 풀려는 전략
한정 조건
백트래킹 알고리즘에서 어떤 노드를 방문하였을 때 그 노드를 포함한 경로가 해답이 될 수 없다고 판단되면 그 노드의 부모 노드로 되돌아가는 것
보통 BFS나 DFS와 함께 구현
BFS보다는 DFS의 구현이 더 편함
최적화 문제, 결정 문제에서 많이 사용
미로 찾기 / n-Queen / Map coloring / 부분 집합의 합 등

한정 조건

3 X 3 행렬 선택 게임
선택한 숫자들의 행과 열은 모두 중복하면 안된다.
가장 적은 점수를 얻는 것이 승리하는 것이라 할때 선택해야하는 숫자 3개를 골라보자.
한정 조건이 없을 때
한정 조건이 있을 때

코드 형태

def 백트래킹(n): if 정답이면 : 출력 or 저장 else : for 모든 자식 노드에 대해 : if 유망한지확인(m) : 자식노드로 이동 백트래킹(n+1) 부모노드로 이동 def 유망한지확인(m): if 조건에 안맞으면 : return False return True
Python
복사

백트래킹과 DFS의 차이

백트레킹
어떤 노드에서 출발하는 경로가 그 해결책으로 이어질 것 같지 않으면 더 이상 경로를 탐색하지 않음으로써 시도 횟수 감소
불필요한 경로의 조기 차단
N! 가지의 경우의 수를 가진 문제에 대해 백트레킹에 가하면 일반적으로 경우의 수가 줄어들지만 최악의 경우는 처리 불가능
모든 후보를 검사하지 않음
DFS
모든 경로를 추적
N! 가지의 경우의 수를 가진 문제에 대해 깊이 우선 탐색을 이용하면 처리 불가능
모든 후보를 검사