[0521 석재호]백트래킹알고리즘

36
백백백백 백백백백 백백백백 백백백백 백백백백 백백 백백백

Transcript of [0521 석재호]백트래킹알고리즘

Page 1: [0521 석재호]백트래킹알고리즘

백트래킹 알고리즘백트래킹 알고리즘

데브루키 꿜라 석재호

Page 2: [0521 석재호]백트래킹알고리즘

백트래킹 알고리즘이란백트래킹 알고리즘이란 ??

명작 돌아보기를 통한 알고리즘의 이해

Page 3: [0521 석재호]백트래킹알고리즘

날로먹는다는 생각이 드신다면날로먹는다는 생각이 드신다면그것은 기분탓입니다그것은 기분탓입니다

Page 4: [0521 석재호]백트래킹알고리즘

날로먹는다는 생각이 드신다면날로먹는다는 생각이 드신다면그것은 기분탓입니다그것은 기분탓입니다

Page 5: [0521 석재호]백트래킹알고리즘

페이지당 페이지당 11 컷인 이유는컷인 이유는 ....뒤에서도 잘 보이시라고뒤에서도 잘 보이시라고 ....

Page 6: [0521 석재호]백트래킹알고리즘

잘잘 .. .. 보이시죠보이시죠 ??

Page 7: [0521 석재호]백트래킹알고리즘

이 부분 입니다이 부분 입니다 !!

Page 8: [0521 석재호]백트래킹알고리즘

마무리는 역시 와장창마무리는 역시 와장창 ....이렇게 이렇게 PTPT 는 는 88 페이지까지 왔습니다페이지까지 왔습니다

Page 9: [0521 석재호]백트래킹알고리즘

백트래킹 알고리즘이란백트래킹 알고리즘이란 ??

실로 연결해 미로 찾기 ? 어디서 본 알고리즘 같은데 ..

D F S

Page 10: [0521 석재호]백트래킹알고리즘

백트래킹 알고리즘이란백트래킹 알고리즘이란 ??

백트래킹 알고리즘은 구조적으로 깊이우선탐색을 기반으로 한다

기본적으로 백트래킹 알고리즘은 DFS 의 구조를 적용할 수 있는 문제에 적용될 수 있다

Page 11: [0521 석재호]백트래킹알고리즘

백트래킹 알고리즘이란백트래킹 알고리즘이란 ??

후보해의 집합에서 최적해 집합을 찾아내는 문제에 쓰일 수 있다

후보해 : 해가 될 가능성 있는 모든 조합최적해 : 문제에서 정하는 답으로서의 기준을 만족하는 해

Page 12: [0521 석재호]백트래킹알고리즘

백트래킹 알고리즘이란백트래킹 알고리즘이란 ??

[ EX ] 홀수 왼쪽에 짝수는 있을 수 없다 이 규칙을 만족하는 순열을 구하라

주어진 수 : 1, 2, 3후보해 : 123, 132, 213, 231, 312, 321최적해 : 132, 312

Page 13: [0521 석재호]백트래킹알고리즘

백트래킹 알고리즘의 특징백트래킹 알고리즘의 특징

DFS 는 주먹구구 (Brute Force) 알고리즘 -> 그냥 다 검사해서 찾아보자

주로 재귀함수를 이용해서 구현된다

백트래킹 알고리즘이 적용되는 유명한 문제들은최소 지수시간 이상의 시간 복잡도를 가진다

Page 14: [0521 석재호]백트래킹알고리즘

백트래킹 알고리즘의 특징백트래킹 알고리즘의 특징

백트래킹이 DFS 라면 ..지수적 시간복잡도의 주먹구구 알고리즘으로문제를 해결한다고 ?이게 무슨 마법의 알고리즘도 아니고 ..이걸 쓰면 지수시간이 다항시간으로 바뀌나요 ?

물론 아니지만 ..

Page 15: [0521 석재호]백트래킹알고리즘

백트래킹 알고리즘의 특징백트래킹 알고리즘의 특징

가지치기 (Pruning)이것이 .. 백트래킹과 DFS 의 차이입니다이것이 거의 전부라 해도 무방합니다

‘ 가지치기가 일어나므로 원시적인 방법으로 모든 경우의 수를 확인하는 알고리즘은 아니다 ..’ - [ 쉽게 배우는 알고리즘 ] 에서 발췌

Page 16: [0521 석재호]백트래킹알고리즘

백트래킹 알고리즘의 특징백트래킹 알고리즘의 특징

별 도움 안되는 ..

대박 가지치기

최적해를 찾는 문제에서녹색 X 와 같은 경우를만들기가 쉽지는 않다

Page 17: [0521 석재호]백트래킹알고리즘

백트래킹 알고리즘의 특징백트래킹 알고리즘의 특징

가지치기는 코드로 치면 .. for, while, if 내에서의 break 나 return 에 해당제어문 내에서 이미 필요한 결과가 나왔는데n 을 채운다거나 .. 재귀 호출을 더 해 내려간다거나 하는 일은백트래킹이 뭔지 몰라도 피하게 되겠죠가지치기 역시도 뭔가 새로운 개념은 아닙니다

Page 18: [0521 석재호]백트래킹알고리즘

가지치기에 왕도가 있을까가지치기에 왕도가 있을까

역시 문제에 따라 다르지 않을까요알고리즘 문제 해결은이 문제를 어떻게 더 간단한 문제로만드는가가 중요할 것입니다

문제를 통해 연습해볼까요문제를 통해 연습해볼까요

Page 19: [0521 석재호]백트래킹알고리즘

NN 개의 퀸 문제개의 퀸 문제백트래킹이라고 하면 바로 이 문제

N * N 크기의 체스판에 N 개의 퀸이 서로 공격하지 못하게 놓아보세요 .. 라는 문제

Page 20: [0521 석재호]백트래킹알고리즘

NN 개의 퀸 문제개의 퀸 문제퀸이 공격할 수 있는 조건

상하좌우 , 대각 모두 칸 수 제한 없이 가능

Page 21: [0521 석재호]백트래킹알고리즘

NN 개의 퀸 문제개의 퀸 문제N 개의 퀸 문제는 N 이 4 이상일 때 해가 존재

N * N 개의 칸에 N 개의 말을 모두 배치해보자

N2CN =

N ! * ( N - N ) !

2N !!

2

N = 4 >>>> 1820 가지

N = 5 >>>> 53130 가지

N = 6 >>>> 1947792 가지…

Page 22: [0521 석재호]백트래킹알고리즘

NN 개의 퀸 문제개의 퀸 문제

문제의 특성에 따른 최적화여왕은 같은 행 , 열에는 있을 수 없다행당 하나 ! 그거야 !1 부터 N 까지 진행하면서i 번째 행에 몇 열에 퀸을 놓을 것인지순차적으로 결정하는 문제로 볼 수 있다

문제에 대한 접근 변화 자체가 가지치기가 된다

Page 23: [0521 석재호]백트래킹알고리즘

NN 개의 퀸 문제개의 퀸 문제모든 조합에 대한 경우의 수

행당 하나의 문제로 만든 후 ..

N = 4 >>>> 1820 가지

N = 5 >>>> 53130 가지

N = 6 >>>> 1947792 가지…

N = 4 >>>> 24 가지

N = 5 >>>> 120 가지

N = 6 >>>> 720 가지…

Page 24: [0521 석재호]백트래킹알고리즘

NN 개의 퀸 문제개의 퀸 문제

하지만 ..상대적으로 굉장해 보이지만 .. 사실처음 방식이 너무 무식한 것일 뿐개선된 알고리즘인 행당 하나

방식의 시간복잡도가 O( N! ) 임을 생각해야 한다

Page 25: [0521 석재호]백트래킹알고리즘

NN 개의 퀸 문제개의 퀸 문제1 행

2 행

3 행

4 행

1

2 3 4 5 6 7 8

2

1 3 4

3 4 5 6 7 8

4 5 6 7 8

5 행 5 6 7 8

Page 26: [0521 석재호]백트래킹알고리즘

NN 개의 퀸 문제개의 퀸 문제

알고리즘 진행i 번째 행에 말을 놓을 때 , 0 ~ i - 1 행에 있는 말들과 같은 열 , 혹은 대각선상에 있다면 쳐낸다아니면 해당 열에 말을 놓고 그곳으로부터가지가 뻗어나간다 ( 재귀호출 )모든 열에 대해 반복해 체크하고호출한 함수로 리턴한다

Page 27: [0521 석재호]백트래킹알고리즘

NN 개의 퀸 문제개의 퀸 문제코드 흐름

Nqueen ( int row, int N ) {for( I = 0 ~ I < N ) { // i 는 열 인덱스에 해당 for( j = 0 ~ j < N)

if(j 행 말이 i 열에 있다 ) 바깥루프 continue for( j = 0 ~ j < N) if(j 행 말이 [row, i] 와 대각선상에 있다 ) 바깥루프 continu

e row 에는 i 열에 말을 놓는다 if( row < N – 1)

Nqueen ( row + 1, N ); else

최적해 도달 ( 전역 카운트 증가 등의 처리를 해준다 )} }

Page 28: [0521 석재호]백트래킹알고리즘

NN 개의 퀸 문제개의 퀸 문제

굵은 가지를 쳐낼 수 있다면 좋겠지만진행 시 다음 행에 유망한 칸 , 놓을 수 없는칸들에 대한 자료를 저장 , 갱신 할 수 있지만재귀 레벨을 줄이기 위해추가적 자료 공간을 할당하고 정보 갱신을하기 위한 비용이 들어간다효율적으로 구현할 수 있다면 좋겠는데 ..

Page 29: [0521 석재호]백트래킹알고리즘

NN 개의 퀸 문제개의 퀸 문제

한가지 방법 ( 출처 : http://madkid.info/15)

non-chronological backtracking

Page 30: [0521 석재호]백트래킹알고리즘

감사합니다 ?

Page 31: [0521 석재호]백트래킹알고리즘

한정분기 알고리즘한정분기 알고리즘

영어로 Branch and Bound 알고리즘백트래킹과 비슷하지만DFS, BFS 가리지 않는다

Pruning 을 통해 한정된 분기를 만든다( 백트래킹과 별로 다른것은 ..)

Page 32: [0521 석재호]백트래킹알고리즘

한정분기 알고리즘한정분기 알고리즘

필요 조건

1) 모든 경우의 수를 나열할 수 있는 방법

2) 분기를 더 이상 할 필요 없다는 것을 판단할 수 있는 방법ex) 총합의 최소값을 찾는데 현재 최소값을

넘어서는 분기가 생기면 그쪽은 더 볼 필요가 없다 ( 정확한 예시는 아닙니다 )

Page 33: [0521 석재호]백트래킹알고리즘

한정분기 알고리즘한정분기 알고리즘

휴리스틱을 이용한 프루닝한정분기 알고리즘에만 국한된 것은 아닙니다현재상태와 휴리스틱 알고리즘을 이용해최적해에 도달할 수 있는지 예측 판단 ,아니라면 너는 이미 죽어있는 가지

Page 34: [0521 석재호]백트래킹알고리즘

한정분기 알고리즘한정분기 알고리즘TSP 를 이용한 휴리스틱 예시

각 노드로부터 나가는 간선 중 최소값이휴리스틱이 된다1, 2, 3, 4, 5 노드를 가진 그래프에서1, 2, 3 노드를 방문했을 때 가중치 합이 30,4 노드에서 나가는 간선 가중치가 (3, 5, 9)5 노드에서 나가는 간선 가중치가 (6, 10, 15) 면해밀턴 싸이클이 완성될 때 가중치 합은최소한 30 + 3 + 6 은 된다

Page 35: [0521 석재호]백트래킹알고리즘

한정분기 알고리즘한정분기 알고리즘

위와 같은 방식으로 최소값을 가진 쪽으로분기해 나간다 -> 끝까지 가서 최소값을 구한다낮은 휴리스틱이 실제 최소값을 보장하지 않으므로 최소값을 갱신할 차례남은 분기들에 대해서는 이 최소값을 이용해branch 하거나 일찌감치 bound 할 수 있다

Page 36: [0521 석재호]백트래킹알고리즘

감사합니다 !