백트래킹

아현·2021년 7월 9일
0

Algorithm Note

목록 보기
10/18

참고


백트래킹


  • 백트래킹(backtracking)

    : 해를 찾는 도중 해가 아니어서 막히면, 되돌아가서 다시 해를 찾아가는 기법을 말합니다.

    • 최적화 문제와 결정 문제를 푸는 방법이 됩니다.

DFS (깊이 우선 탐색) & 백트래킹


  • 깊이 우선 탐색(DFS)

    • DFS는 가능한 모든 경로(후보)를 탐색합니다. 따라서, 불필요할 것 같은 경로를 사전에 차단하거나 하는 등의 행동이 없으므로 경우의 수를 줄이지 못합니다.

    • N! 가지의 경우의 수를 가진 문제는 DFS로 처리가 불가능할 것입니다.


  • 백트래킹(Backtracking)

    • 해를 찾아가는 도중, 지금의 경로가 해가 될 것 같지 않으면 그 경로를 더이상 가지 않고 되돌아갑니다.

      • 즉, 코딩에서는 반복문의 횟수까지 줄일 수 있으므로 효율적입니다.
    • 이를 가지치기라고 하는데, 불필요한 부분을 쳐내고 최대한 올바른 쪽으로 간다는 의미입니다.


  • 일반적으로, 불필요한 경로를 조기에 차단할 수 있게 되어 경우의 수가 줄어들지만, 만약 N!의 경우의 수를 가진 문제에서 최악의 경우에는 여전히 지수함수 시간을 필요로 하므로 처리가 불가능 할 수도 있습니다. 가지치기를 얼마나 잘하느냐에 따라 효율성이 결정되게 됩니다.

  • 주로 문제 풀이에서는 DFS 등으로 모든 경우의 수를 탐색하는 과정에서, 조건문 등을 걸어 답이 절대로 될 수 없는 상황을 정의하고, 그러한 상황일 경우에는 탐색을 중지시킨 뒤 그 이전으로 돌아가서 다시 다른 경우를 탐색하게끔 구현할 수 있습니다.

출처

profile
For the sake of someone who studies computer science

0개의 댓글