Your SlideShare is downloading. ×
0
백트래킹 알고리즘 데브루키  꿜라 석재호
백트래킹 알고리즘이란 ? <ul><li>명작 돌아보기를 통한 알고리즘의 이해 </li></ul>
날로먹는다는 생각이 드신다면 그것은 기분탓입니다
날로먹는다는 생각이 드신다면 그것은 기분탓입니다
페이지당  1 컷인 이유는 .. 뒤에서도 잘 보이시라고 ..
잘 ..  보이시죠 ?
이 부분 입니다 !
마무리는 역시 와장창 .. 이렇게  PT 는  8 페이지까지 왔습니다
백트래킹 알고리즘이란 ? <ul><li>실로 연결해 미로 찾기 ?  </li></ul><ul><li>어디서 본 알고리즘 같은데 .. </li></ul>D F S
백트래킹 알고리즘이란 ? <ul><li>백트래킹 알고리즘은 구조적으로 깊이우선탐색을  </li></ul><ul><li>기반으로 한다 </li></ul><ul><li>기본적으로 백트래킹 알고리즘은  DFS 의 구조를  <...
백트래킹 알고리즘이란 ? <ul><li>후보해의 집합에서 최적해 집합을 찾아내는 문제에  </li></ul><ul><li>쓰일 수 있다 </li></ul><ul><li>후보해  :  해가 될 가능성 있는 모든 조합 </...
백트래킹 알고리즘이란 ? <ul><li>[ EX ]  홀수 왼쪽에 짝수는 있을 수 없다 </li></ul><ul><li>  이 규칙을 만족하는 순열을 구하라 </li></ul><ul><li>주어진 수  : 1, 2, 3...
백트래킹 알고리즘의 특징 <ul><li>DFS 는 주먹구구 (Brute Force)  알고리즘 </li></ul><ul><li>->  그냥 다 검사해서 찾아보자 </li></ul><ul><li>주로 재귀함수를 이용해서 ...
백트래킹 알고리즘의 특징 <ul><li>백트래킹이  DFS 라면 .. </li></ul><ul><li>지수적 시간복잡도의 주먹구구 알고리즘으로 </li></ul><ul><li>문제를 해결한다고 ? </li></ul><u...
백트래킹 알고리즘의 특징 <ul><li>가지치기 (Pruning) </li></ul><ul><li>이것이 ..  백트래킹과  DFS 의 차이입니다 </li></ul><ul><li>이것이 거의 전부라 해도 무방합니다 </...
백트래킹 알고리즘의 특징 <ul><li>별 도움 안되는 .. </li></ul>대박 가지치기 최적해를 찾는 문제에서 녹색  X 와 같은 경우를 만들기가 쉽지는 않다
백트래킹 알고리즘의 특징 <ul><li>가지치기는 코드로 치면 ..  </li></ul><ul><li>for, while, if  내에서의  break 나  return 에 해당 </li></ul><ul><li>제어문 ...
가지치기에 왕도가 있을까 <ul><li>역시 문제에 따라 다르지 않을까요 </li></ul><ul><li>알고리즘 문제 해결은 </li></ul><ul><li>이 문제를 어떻게 더 간단한 문제로 </li></ul><ul...
N 개의 퀸 문제 <ul><li>백트래킹이라고 하면 바로 이 문제 </li></ul><ul><li>N * N  크기의 체스판에  N 개의 퀸이  </li></ul><ul><li>서로 공격하지 못하게 놓아보세요 ..  라...
N 개의 퀸 문제 <ul><li>퀸이 공격할 수 있는 조건 </li></ul><ul><li>상하좌우 ,  대각 모두 칸 수 제한 없이 가능 </li></ul>
N 개의 퀸 문제 <ul><li>N 개의 퀸 문제는  N 이  4  이상일 때 해가 존재 </li></ul><ul><li>N * N 개의 칸에  N 개의 말을 모두 배치해보자 </li></ul>N = 4  >>>>  1...
N 개의 퀸 문제 <ul><li>문제의 특성에 따른 최적화 </li></ul><ul><li>여왕은 같은 행 ,  열에는 있을 수 없다 </li></ul><ul><li>행당 하나 !  그거야 ! </li></ul><ul>...
N 개의 퀸 문제 <ul><li>모든 조합에 대한 경우의 수 </li></ul><ul><li>행당 하나의 문제로 만든 후 .. </li></ul>N = 4  >>>>  1820  가지 N = 5  >>>>  53130 ...
N 개의 퀸 문제 <ul><li>하지만 .. </li></ul><ul><li>상대적으로 굉장해 보이지만 ..  사실 </li></ul><ul><li>처음 방식이 너무 무식한 것일 뿐 </li></ul><ul><li>개선...
N 개의 퀸 문제 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
N 개의 퀸 문제 <ul><li>알고리즘 진행 </li></ul><ul><li>i 번째 행에 말을 놓을 때 ,  </li></ul><ul><li>0 ~ i - 1  행에 있는 말들과 같은 열 ,  혹은 대각선 </li>...
N 개의 퀸 문제 <ul><li>코드 흐름 </li></ul><ul><li>Nqueen ( int row, int N ) { </li></ul><ul><li>for( I = 0 ~ I < N )  { // i 는 열 인...
N 개의 퀸 문제 <ul><li>굵은 가지를 쳐낼 수 있다면 좋겠지만 </li></ul><ul><li>진행 시 다음 행에 유망한 칸 ,  놓을 수 없는 </li></ul><ul><li>칸들에 대한 자료를 저장 ,  갱신...
N 개의 퀸 문제 <ul><li>한가지 방법  ( 출처  :  http://madkid.info/15) </li></ul><ul><li>non-chronological backtracking </li></ul>
<ul><li>감사합니다 ? </li></ul>
한정분기 알고리즘 <ul><li>영어로  Branch and Bound  알고리즘 </li></ul><ul><li>백트래킹과 비슷하지만 </li></ul><ul><li>DFS, BFS  가리지 않는다 </li></ul>...
한정분기 알고리즘 <ul><li>필요 조건 </li></ul><ul><li>모든 경우의 수를 나열할 수 있는 방법 </li></ul><ul><li>분기를 더 이상 할 필요 없다는 것을  </li></ul><ul><li>...
한정분기 알고리즘 <ul><li>휴리스틱을 이용한 프루닝 </li></ul><ul><li>한정분기 알고리즘에만 국한된 것은 아닙니다 </li></ul><ul><li>현재상태와 휴리스틱 알고리즘을 이용해 </li></ul...
한정분기 알고리즘 <ul><li>TSP 를 이용한 휴리스틱 예시 </li></ul><ul><li>각 노드로부터 나가는 간선 중 최소값이 </li></ul><ul><li>휴리스틱이 된다 </li></ul><ul><li>1...
한정분기 알고리즘 <ul><li>위와 같은 방식으로 최소값을 가진 쪽으로 </li></ul><ul><li>분기해 나간다  ->  끝까지 가서 최소값을 구한다 </li></ul><ul><li>낮은 휴리스틱이 실제 최소값을...
<ul><li>감사합니다 ! </li></ul>
Upcoming SlideShare
Loading in...5
×

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

5,738

Published on

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

  1. 1. 백트래킹 알고리즘 데브루키 꿜라 석재호
  2. 2. 백트래킹 알고리즘이란 ? <ul><li>명작 돌아보기를 통한 알고리즘의 이해 </li></ul>
  3. 3. 날로먹는다는 생각이 드신다면 그것은 기분탓입니다
  4. 4. 날로먹는다는 생각이 드신다면 그것은 기분탓입니다
  5. 5. 페이지당 1 컷인 이유는 .. 뒤에서도 잘 보이시라고 ..
  6. 6. 잘 .. 보이시죠 ?
  7. 7. 이 부분 입니다 !
  8. 8. 마무리는 역시 와장창 .. 이렇게 PT 는 8 페이지까지 왔습니다
  9. 9. 백트래킹 알고리즘이란 ? <ul><li>실로 연결해 미로 찾기 ? </li></ul><ul><li>어디서 본 알고리즘 같은데 .. </li></ul>D F S
  10. 10. 백트래킹 알고리즘이란 ? <ul><li>백트래킹 알고리즘은 구조적으로 깊이우선탐색을 </li></ul><ul><li>기반으로 한다 </li></ul><ul><li>기본적으로 백트래킹 알고리즘은 DFS 의 구조를 </li></ul><ul><li>적용할 수 있는 문제에 적용될 수 있다 </li></ul>
  11. 11. 백트래킹 알고리즘이란 ? <ul><li>후보해의 집합에서 최적해 집합을 찾아내는 문제에 </li></ul><ul><li>쓰일 수 있다 </li></ul><ul><li>후보해 : 해가 될 가능성 있는 모든 조합 </li></ul><ul><li>최적해 : 문제에서 정하는 답으로서의 기준을 </li></ul><ul><li> 만족하는 해 </li></ul><ul><li> </li></ul>
  12. 12. 백트래킹 알고리즘이란 ? <ul><li>[ EX ] 홀수 왼쪽에 짝수는 있을 수 없다 </li></ul><ul><li> 이 규칙을 만족하는 순열을 구하라 </li></ul><ul><li>주어진 수 : 1, 2, 3 </li></ul><ul><li>후보해 : 123, 132, 213, 231, 312, 321 </li></ul><ul><li>최적해 : 132, 312 </li></ul>
  13. 13. 백트래킹 알고리즘의 특징 <ul><li>DFS 는 주먹구구 (Brute Force) 알고리즘 </li></ul><ul><li>-> 그냥 다 검사해서 찾아보자 </li></ul><ul><li>주로 재귀함수를 이용해서 구현된다 </li></ul><ul><li>백트래킹 알고리즘이 적용되는 유명한 문제들은 </li></ul><ul><li>최소 지수시간 이상의 시간 복잡도를 가진다 </li></ul>
  14. 14. 백트래킹 알고리즘의 특징 <ul><li>백트래킹이 DFS 라면 .. </li></ul><ul><li>지수적 시간복잡도의 주먹구구 알고리즘으로 </li></ul><ul><li>문제를 해결한다고 ? </li></ul><ul><li>이게 무슨 마법의 알고리즘도 아니고 .. </li></ul><ul><li>이걸 쓰면 지수시간이 다항시간으로 바뀌나요 ? </li></ul><ul><li>물론 아니지만 .. </li></ul>
  15. 15. 백트래킹 알고리즘의 특징 <ul><li>가지치기 (Pruning) </li></ul><ul><li>이것이 .. 백트래킹과 DFS 의 차이입니다 </li></ul><ul><li>이것이 거의 전부라 해도 무방합니다 </li></ul><ul><li>‘ 가지치기가 일어나므로 원시적인 방법으로 </li></ul><ul><li> 모든 경우의 수를 확인하는 알고리즘은 </li></ul><ul><li> 아니다 ..’ - [ 쉽게 배우는 알고리즘 ] 에서 발췌 </li></ul>
  16. 16. 백트래킹 알고리즘의 특징 <ul><li>별 도움 안되는 .. </li></ul>대박 가지치기 최적해를 찾는 문제에서 녹색 X 와 같은 경우를 만들기가 쉽지는 않다
  17. 17. 백트래킹 알고리즘의 특징 <ul><li>가지치기는 코드로 치면 .. </li></ul><ul><li>for, while, if 내에서의 break 나 return 에 해당 </li></ul><ul><li>제어문 내에서 이미 필요한 결과가 나왔는데 </li></ul><ul><li>n 을 채운다거나 .. </li></ul><ul><li>재귀 호출을 더 해 내려간다거나 하는 일은 </li></ul><ul><li>백트래킹이 뭔지 몰라도 피하게 되겠죠 </li></ul><ul><li>가지치기 역시도 뭔가 새로운 개념은 아닙니다 </li></ul>
  18. 18. 가지치기에 왕도가 있을까 <ul><li>역시 문제에 따라 다르지 않을까요 </li></ul><ul><li>알고리즘 문제 해결은 </li></ul><ul><li>이 문제를 어떻게 더 간단한 문제로 </li></ul><ul><li>만드는가가 중요할 것입니다 </li></ul><ul><li>문제를 통해 연습해볼까요 </li></ul>
  19. 19. N 개의 퀸 문제 <ul><li>백트래킹이라고 하면 바로 이 문제 </li></ul><ul><li>N * N 크기의 체스판에 N 개의 퀸이 </li></ul><ul><li>서로 공격하지 못하게 놓아보세요 .. 라는 문제 </li></ul>
  20. 20. N 개의 퀸 문제 <ul><li>퀸이 공격할 수 있는 조건 </li></ul><ul><li>상하좌우 , 대각 모두 칸 수 제한 없이 가능 </li></ul>
  21. 21. N 개의 퀸 문제 <ul><li>N 개의 퀸 문제는 N 이 4 이상일 때 해가 존재 </li></ul><ul><li>N * N 개의 칸에 N 개의 말을 모두 배치해보자 </li></ul>N = 4 >>>> 1820 가지 N = 5 >>>> 53130 가지 N = 6 >>>> 1947792 가지… N 2 C N = N ! * ( N - N ) ! 2 N ! ! 2
  22. 22. N 개의 퀸 문제 <ul><li>문제의 특성에 따른 최적화 </li></ul><ul><li>여왕은 같은 행 , 열에는 있을 수 없다 </li></ul><ul><li>행당 하나 ! 그거야 ! </li></ul><ul><li>1 부터 N 까지 진행하면서 </li></ul><ul><li>i 번째 행에 몇 열에 퀸을 놓을 것인지 </li></ul><ul><li>순차적으로 결정하는 문제로 볼 수 있다 </li></ul><ul><li>문제에 대한 접근 변화 자체가 가지치기가 된다 </li></ul>
  23. 23. N 개의 퀸 문제 <ul><li>모든 조합에 대한 경우의 수 </li></ul><ul><li>행당 하나의 문제로 만든 후 .. </li></ul>N = 4 >>>> 1820 가지 N = 5 >>>> 53130 가지 N = 6 >>>> 1947792 가지… N = 4 >>>> 24 가지 N = 5 >>>> 120 가지 N = 6 >>>> 720 가지…
  24. 24. N 개의 퀸 문제 <ul><li>하지만 .. </li></ul><ul><li>상대적으로 굉장해 보이지만 .. 사실 </li></ul><ul><li>처음 방식이 너무 무식한 것일 뿐 </li></ul><ul><li>개선된 알고리즘인 행당 하나 </li></ul><ul><li>방식의 시간복잡도가 </li></ul><ul><li>O( N! ) 임을 생각해야 한다 </li></ul>
  25. 25. N 개의 퀸 문제 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
  26. 26. N 개의 퀸 문제 <ul><li>알고리즘 진행 </li></ul><ul><li>i 번째 행에 말을 놓을 때 , </li></ul><ul><li>0 ~ i - 1 행에 있는 말들과 같은 열 , 혹은 대각선 </li></ul><ul><li>상에 있다면 쳐낸다 </li></ul><ul><li>아니면 해당 열에 말을 놓고 그곳으로부터 </li></ul><ul><li>가지가 뻗어나간다 ( 재귀호출 ) </li></ul><ul><li>모든 열에 대해 반복해 체크하고 </li></ul><ul><li>호출한 함수로 리턴한다 </li></ul>
  27. 27. N 개의 퀸 문제 <ul><li>코드 흐름 </li></ul><ul><li>Nqueen ( int row, int N ) { </li></ul><ul><li>for( I = 0 ~ I < N ) { // i 는 열 인덱스에 해당 </li></ul><ul><li> for( j = 0 ~ j < N) </li></ul><ul><li> if(j 행 말이 i 열에 있다 ) 바깥루프 continue </li></ul><ul><li> for( j = 0 ~ j < N) </li></ul><ul><li> if(j 행 말이 [row, i] 와 대각선상에 있다 ) 바깥루프 continue </li></ul><ul><li> </li></ul><ul><li> row 에는 i 열에 말을 놓는다 </li></ul><ul><li> if( row < N – 1) </li></ul><ul><li>Nqueen ( row + 1, N ); </li></ul><ul><li> else </li></ul><ul><li>최적해 도달 ( 전역 카운트 증가 등의 처리를 해준다 ) </li></ul><ul><li>} } </li></ul>
  28. 28. N 개의 퀸 문제 <ul><li>굵은 가지를 쳐낼 수 있다면 좋겠지만 </li></ul><ul><li>진행 시 다음 행에 유망한 칸 , 놓을 수 없는 </li></ul><ul><li>칸들에 대한 자료를 저장 , 갱신 할 수 있지만 </li></ul><ul><li>재귀 레벨을 줄이기 위해 </li></ul><ul><li>추가적 자료 공간을 할당하고 정보 갱신을 </li></ul><ul><li>하기 위한 비용이 들어간다 </li></ul><ul><li>효율적으로 구현할 수 있다면 좋겠는데 .. </li></ul>
  29. 29. N 개의 퀸 문제 <ul><li>한가지 방법 ( 출처 : http://madkid.info/15) </li></ul><ul><li>non-chronological backtracking </li></ul>
  30. 30. <ul><li>감사합니다 ? </li></ul>
  31. 31. 한정분기 알고리즘 <ul><li>영어로 Branch and Bound 알고리즘 </li></ul><ul><li>백트래킹과 비슷하지만 </li></ul><ul><li>DFS, BFS 가리지 않는다 </li></ul><ul><li>Pruning 을 통해 한정된 분기를 만든다 </li></ul><ul><li>( 백트래킹과 별로 다른것은 ..) </li></ul>
  32. 32. 한정분기 알고리즘 <ul><li>필요 조건 </li></ul><ul><li>모든 경우의 수를 나열할 수 있는 방법 </li></ul><ul><li>분기를 더 이상 할 필요 없다는 것을 </li></ul><ul><li>판단할 수 있는 방법 </li></ul><ul><li>ex) 총합의 최소값을 찾는데 현재 최소값을 </li></ul><ul><li> 넘어서는 분기가 생기면 </li></ul><ul><li> 그쪽은 더 볼 필요가 없다 </li></ul><ul><li> ( 정확한 예시는 아닙니다 ) </li></ul>
  33. 33. 한정분기 알고리즘 <ul><li>휴리스틱을 이용한 프루닝 </li></ul><ul><li>한정분기 알고리즘에만 국한된 것은 아닙니다 </li></ul><ul><li>현재상태와 휴리스틱 알고리즘을 이용해 </li></ul><ul><li>최적해에 도달할 수 있는지 예측 판단 , </li></ul><ul><li>아니라면 너는 이미 죽어있는 가지 </li></ul>
  34. 34. 한정분기 알고리즘 <ul><li>TSP 를 이용한 휴리스틱 예시 </li></ul><ul><li>각 노드로부터 나가는 간선 중 최소값이 </li></ul><ul><li>휴리스틱이 된다 </li></ul><ul><li>1, 2, 3, 4, 5 노드를 가진 그래프에서 </li></ul><ul><li>1, 2, 3 노드를 방문했을 때 가중치 합이 30, </li></ul><ul><li>4 노드에서 나가는 간선 가중치가 (3, 5, 9) </li></ul><ul><li>5 노드에서 나가는 간선 가중치가 (6, 10, 15) 면 </li></ul><ul><li>해밀턴 싸이클이 완성될 때 가중치 합은 </li></ul><ul><li>최소한 30 + 3 + 6 은 된다 </li></ul>
  35. 35. 한정분기 알고리즘 <ul><li>위와 같은 방식으로 최소값을 가진 쪽으로 </li></ul><ul><li>분기해 나간다 -> 끝까지 가서 최소값을 구한다 </li></ul><ul><li>낮은 휴리스틱이 실제 최소값을 </li></ul><ul><li>보장하지 않으므로 최소값을 갱신할 차례 </li></ul><ul><li>남은 분기들에 대해서는 이 최소값을 이용해 </li></ul><ul><li>branch 하거나 일찌감치 bound 할 수 있다 </li></ul>
  36. 36. <ul><li>감사합니다 ! </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×