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

Preview:

Citation preview

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

데브루키 꿜라 석재호

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

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

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

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

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

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

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

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

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

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

D F S

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

물론 아니지만 ..

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

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

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

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

별 도움 안되는 ..

대박 가지치기

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

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

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

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

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

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

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

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

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

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

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

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

N2CN =

N ! * ( N - N ) !

2N !!

2

N = 4 >>>> 1820 가지

N = 5 >>>> 53130 가지

N = 6 >>>> 1947792 가지…

NN 개의 퀸 문제개의 퀸 문제

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

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

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

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

N = 4 >>>> 1820 가지

N = 5 >>>> 53130 가지

N = 6 >>>> 1947792 가지…

N = 4 >>>> 24 가지

N = 5 >>>> 120 가지

N = 6 >>>> 720 가지…

NN 개의 퀸 문제개의 퀸 문제

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

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

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

NN 개의 퀸 문제개의 퀸 문제

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

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

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

NN 개의 퀸 문제개의 퀸 문제

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

NN 개의 퀸 문제개의 퀸 문제

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

non-chronological backtracking

감사합니다 ?

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

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

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

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

필요 조건

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

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

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

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

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

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

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

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

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

감사합니다 !

Recommended