1 / 13

8.1 절 ~8.3 절 동적 프로그래밍

8.1 절 ~8.3 절 동적 프로그래밍. 서국화 kookhwa@kunsan.ac.kr 군산대학교 통계컴퓨터과학과 IST 연구실 2012. 10.25. 목차. 어떤 문제를 동적 프로그래밍으로 푸는가 행렬 경로 문제 조약돌 놓기 문제. 어떤 문제를 동적 프로그래밍으로 푸는가 (1/2). fib(7). fib(6). fib(5). fib(5). fib(4). fib(4). fib(4). fib(3). fib(3). fib(3). fib(3). fib(3). fib (2). fib(2).

bryce
Download Presentation

8.1 절 ~8.3 절 동적 프로그래밍

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 8.1절~8.3절 동적 프로그래밍 서국화 kookhwa@kunsan.ac.kr 군산대학교 통계컴퓨터과학과 IST 연구실 2012. 10.25

  2. 목차 어떤 문제를 동적 프로그래밍으로 푸는가 행렬 경로 문제 조약돌 놓기 문제 IST (Information Sciences & Technology) Laboratory

  3. 어떤 문제를 동적 프로그래밍으로 푸는가(1/2) fib(7) fib(6) fib(5) fib(5) fib(4) fib(4) fib(4) fib(3) fib(3) fib(3) fib(3) fib(3) fib (2) fib(2) fib(2) fib (2) fib(2) fib (2) fib(2) fib(2) fib (1) fib (1) fib (1) fib(1) fib(1) 중복 호출 상황을 보여주는 트리 • 최적 부분구조로 이루어진 경우 • 재귀적 해법을 사용하여 심한 중복 호출이 일어나는 경우 • 피보나치수 구하기 • 문제의 크기가 커짐에 따라 중복 호출이 증가하여 비효율이 발생 IST (Information Sciences & Technology) Laboratory

  4. 어떤 문제를 동적 프로그래밍으로 푸는가(2/2) fibonacci(n) {         f[1] ← f[2] ← 1; fori ← 3 ton                 f[ i ] ← f[i-1] +f[i-2]; return f[n]; } • 중복호출 해결 • 배열에 저장 IST (Information Sciences & Technology) Laboratory

  5. 행렬 경로 문제(1/3) 불법 이동 (상향) • 이동 규칙 • 행렬의 좌상단에서 시작하여 우하단까지 이동 • 오른쪽이나 아래쪽으로만 이동 • 왼쪽, 위쪽, 대각선 이동은 허용 안됨 • 목표 • 행렬의 좌상단에서 시작하여 우하단까지 이동하되, 방문한 칸에 있는 수들을 더한 값들 중 최대값을 구함 IST (Information Sciences & Technology) Laboratory

  6. 행렬 경로 문제(2/3) matrixPath(i, j) ▷ (i, j)에 이르는 최고점수 { if (i = 1 andj = 1) then return m11; else if (i = 1) then return (m1j + matrixPath(1, j-1)); else if (j = 1) then return (mi 1 + matrixPath(i-1, 1)); else return (mij+ (max( matrixPath(i-1, j), matrixPath(i, j-1) ) )); } 재귀 알고리즘 IST (Information Sciences & Technology) Laboratory

  7. 행렬 경로 문제(3/3) matrixPath(n) ▷ (n, n)에 이르는 최고점수 {         c[1, 1] ← m11 ; fori ← 2 ton                 c[i, 1] ← mi 1 + c[i-1, 1]; forj ← 2 ton                 c[1, j] ← m1j + c[1, j-1];  fori ← 2 ton forj ← 2 ton                         c[i, j] ← mij+ max(c[i-1, j], c[i, j-1]); return c[n, n]; } • 동적프로그래밍을 이용한알고리즘 • 수행시간은 O(n2) IST (Information Sciences & Technology) Laboratory

  8. 조약돌 놓기 문제(1/5) • 조약돌을 놓는 방법 • 3×N 테이블의 각 칸에 양 또는 음의 정수가 기록 • 가로나 세로로 인접한 두 칸에 동시에 조약돌을 놓을 수 없음 • 각 열에는 적어도 하나 이상의조약돌을 놓아야 됨 • 목표 • 돌이 놓인 자리에 있는 수의 합을 최대가 되도록조약돌 놓기 IST (Information Sciences & Technology) Laboratory

  9. 조약돌 놓기 문제(2/5) 패턴 1: 패턴 2: 패턴 3: 패턴 4: 가능한 패턴 IST (Information Sciences & Technology) Laboratory

  10. 조약돌 놓기 문제(3/5) 패턴 1: 1 2 1 3 패턴 2: 2 4 2 2 1 3 패턴 3: 1 3 2 3 패턴 4: 2 4 IST (Information Sciences & Technology) Laboratory 서로 양립할 수 있는 패턴들

  11. … … -5 4 4 -5 조약돌 놓기 문제(4/5) i-1 i • 최적 부분구조를 이용 • i열까지의 최적해를 구하기 위해 i-1 열까지의 최적해를구성 • 최적 부분구조를 가진 문제를 재귀호출을 이용하여 구현을 한다면 또 중복호출이 발생 IST (Information Sciences & Technology) Laboratory

  12. 조약돌 놓기 문제(5/5) pebble (n) ▷ n열까지 조약돌을 놓을 때의 최고점수 ▷peb[i, p] : i열이 패턴p로 놓을 때의 최고점수 ▷ w[1, p] : i열이 패턴 p로 놓일 때 i열에 돌이 놓인 곳의 점수합 { forp ← 1 to 4 peb[1, p] ← w[1, p] ; // 첫번째 열에서의 점수합 fori ← 2 ton forp ← 1 to 4 peb[i, p] ← max{peb[i-1, q]} + w[i, p] ; return max { peb[n, p] } ; } • 동적프로그래밍을 이용한알고리즘 • for문이 4*(n-1)반복되므로수행시간은 O(n) IST (Information Sciences & Technology) Laboratory

  13. 감사합니다 서국화 kookhwa@kunsan.ac.kr IST (Information Sciences & Technology) Laboratory

More Related