BackTracking
되추적 알고리즘은 결과를 찾는 도중 막히면 다시 되돌아가 결과를 찾는다.
모든 노드를 탐색해서 만드는 DFS와 비슷하다.
구현 방법
DFS는 모든 노드를 탐색하며,
BackTracking은 모든 노드를 탐색하지만, 특정 조건을 설정해서 이 경로가 아니라고 판단되면 경로를 이탈하고 다시 되돌아 가며, 가지치기를 통해 불필요한 경로를 차단해 효율을 높일 수 있다.
실제 구현시, 고려할 수 있는 모든 경우의 수를 상태공간트리(State Space Tree)를 통해 표현한다.
각 후보군을 DFS(깊이 우선 탐색) 방식으로 확인
상태 공간 트리를 탐색하면서, 제약이 맞지 않으면 해의 후보가 될만한 다른 곳으로 바로 넘어가서 탐색한다.
Promising : 해당 루트가 조건에 맞는지를 검사하는 기법
Prusing : 조건에 맞지 않으면 포기하고 다른 루트로 바로 돌아가, 탐색의 시간을 절약하는 가지치기 기법
즉 , 백트래킹은 트리 구조를 기반으로 DFS로 깊이 탐색을 진행하면서 각 루트에 대해 조건에 부합하는지
Promising을 통해 체크하고, 만약 해당 트리에서 조건에 맞지 않는 노드는 더이상 DFS 탐색을 진행하지 않고, Prusing 가지를 쳐서 아래의 노드를 탐색하지 않는다.
예시 문제
N Queen 문제
NxN 크기의 체스판에 N개의 퀸을 서로 공격할 수 없도록 배치하는 문제
4x4의 체스판을 가정해 4개의 퀸자리를 선택한다고 하면 굉장히 많은 가지의 경우의 수가 존재한다.
이 모든 경우의 수를 다 참조하여 판단하는 것은 매우 비효율적이다.
이제 해당 가지의 경우에서 Promising과 Nonpromising을 적용하고 Prusing하면
유망한(Promising)노드의 밑으로 계속해서 깊이 우선 탐색을 진행하고, 유망하지 않은(Non-Promising)노드는 탐색하지 않고 Prusing(가지치기)를 하고 BackTrack하여 다른 Promising한 노드를 찾아 조사를 한다.
코드 구현 예제 N-Queen 구하기
'Algorithm Practice' 카테고리의 다른 글
최단 경로 알고리즘 (0) | 2024.10.23 |
---|---|
몬테카를로 알고리즘(MonteCarlo Algorithm) (2) | 2024.10.23 |
최소 신장 트리(MST, Minimum Spanning Tree) 구하기 (1) | 2024.10.22 |
정렬 알고리즘 (0) | 2023.12.19 |
DFS, BFS 구현 및 정리 (0) | 2023.10.17 |