백트래킹

08.Algorithm 2020. 6. 1. 15:36
728x90
반응형

DFS, 유망성검사, 재귀함수 , 가지치기

모든해, promising(u)

상태공간 트리 표현

 

 

 

 

[개념]여러 후보해 중에서 특정 조건을 충족시키는 모든 해를 찾는 알고리즘

 

[특징]

  - 해가 될 조건을만족시키는 “진짜 해”를 효율적으로 찾는 것

 -  DFS(깊이우선탐색) 탐색하는 모든 방법

 

[절차] 문제분석>상태전이트리>DFS<마디유보성>Y:Child 검색,N:가지치기

1)깊이우선탐색(DFS)

2)유망성 검사(Promising, Non-Promising)

3)분할정복 기반 완전검색(Exhaustive Search)

4)전수검사 통한 비효율제거 (Recursive)

5)최적해 찾기

 

- 상태공간트리의깊이 우선검색실시

 - 각 마디가유망한지 점검

 - 만일 유망하지않으면 그 마디의 부모마디로 돌아가서 검색을 계속

 

[저장공간] DFS(트리깊이알때), 스택

 

[단점] 백트래킹 성능이슈 - 스택 오버플로우

[보완] 개선된 백트래킹 알고리즘

 

[소스코드] backtrack(int a[], int k, data input)

 int c[MAXCANDIDATES]; // 다음 위치가 될 수 있는 후보 위치 //

 int ncandidates;          // 다음 위치가 될 수 있는 후보 개수 //

 if ( is_a_solution(a, k, input) )

    process_solution(a, k, inpit);

 else

    construct_candidates(a, k, input, c, &ncandidates);

    for(i=0; i<ncandidates; i++)

         a[k] = c[i];

         backtrack(a, k, input);

         if(finished) return;  // 일찍 종료함 //

728x90

'08.Algorithm' 카테고리의 다른 글

자바 스크립트  (0) 2020.06.01
타입 스크립트 (Type Script)  (0) 2020.06.01
그래프  (0) 2020.06.01
알파베타 가지치기 알고리즘  (0) 2020.06.01
이더리움 - 블룸 필터(Bloom filter)  (0) 2020.06.01
Posted by Mr. Slumber
,