unagi11
이국의 보조기억장치
unagi11
전체 방문자
오늘
어제
  • 전체 글 (35)
    • Technology (28)
      • Algorithm Theory (10)
      • Problem Solving (14)
      • Unreal (1)
      • Unity (1)
      • Cocos2d (0)
      • etc (2)
    • Develop (5)
      • Dungeon-Chess (0)
      • Past Projects (3)
      • etc (2)
    • Daily (2)

블로그 메뉴

  • 깃허브
  • 프로필

인기 글

최근 글

hELLO · Designed By 정상우.
unagi11

이국의 보조기억장치

[Algorithm] Backtracking
Technology/Algorithm Theory

[Algorithm] Backtracking

2022. 4. 20. 22:30

백트래킹은 DFS를 기반으로 한 문제풀이방법이다.

DFS (Depth-First Search, Preorder Tree Traversal) 란?
뿌리가 되는 노드부터, 그 노드의 모든 후손노드를 차례로 방문하는것이다.

// DFS pseudo code
void depth_first_search(node v)
{
    node u;
    visit v;
    for (each child u of v)
        depth_first_search(u);
}

Backtracking 방법은, State Space Tree (상태 공간 트리)를 제작한다.

상태공간 트리의 유망하지 않은 가지를 pruning(가지치기) 하여, 모든 경우를 순회하지 않고 답을 찾을 수 있다.

Promising 이란?
- 이후 전혀 해답이 나올 가능성이 없는 노드를 Non-promising이라 한다.
- 그렇지 않은것을 promising이라 한다.

Backtracking 이란?
- 노드의 유망성을 점검한 후, 유망하지 않다고 판정되면 그 노드의 부모노드로 Backtrack하여 다음 후손노드에 대한 검색을 진행하는 방법이다.
// Backtracking pseudo code
void backtracking(node v)
{
    node u;
    if (promising(v))
        if(there is a solution at v)
            write the solution;
        else
            for (each child u of v)
                cheknode(u);
}

 

모든 조합의 수중에 최적의 경우를 구해야하는 문제에서 자주 쓰이는 해결방법이다.

다만 그 과정에서 pruning으로 최적화 할수 있다. 대표적으로 N-Queen 문제가 있다.

 
저작자표시 변경금지
    'Technology/Algorithm Theory' 카테고리의 다른 글
    • [Algorithm] Spanning Tree
    • [Algorithm] 최대 유량 문제
    • [Algorithm] 최대 이분 매칭 문제
    • [Algorithm] Sieve of Eratosthenes
    unagi11
    unagi11
    개발하고 기록하자

    티스토리툴바