140 likes | 1.18k Views
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).
E N D
8.1절~8.3절 동적 프로그래밍 서국화 kookhwa@kunsan.ac.kr 군산대학교 통계컴퓨터과학과 IST 연구실 2012. 10.25
목차 어떤 문제를 동적 프로그래밍으로 푸는가 행렬 경로 문제 조약돌 놓기 문제 IST (Information Sciences & Technology) Laboratory
어떤 문제를 동적 프로그래밍으로 푸는가(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
어떤 문제를 동적 프로그래밍으로 푸는가(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
행렬 경로 문제(1/3) 불법 이동 (상향) • 이동 규칙 • 행렬의 좌상단에서 시작하여 우하단까지 이동 • 오른쪽이나 아래쪽으로만 이동 • 왼쪽, 위쪽, 대각선 이동은 허용 안됨 • 목표 • 행렬의 좌상단에서 시작하여 우하단까지 이동하되, 방문한 칸에 있는 수들을 더한 값들 중 최대값을 구함 IST (Information Sciences & Technology) Laboratory
행렬 경로 문제(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
행렬 경로 문제(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
조약돌 놓기 문제(1/5) • 조약돌을 놓는 방법 • 3×N 테이블의 각 칸에 양 또는 음의 정수가 기록 • 가로나 세로로 인접한 두 칸에 동시에 조약돌을 놓을 수 없음 • 각 열에는 적어도 하나 이상의조약돌을 놓아야 됨 • 목표 • 돌이 놓인 자리에 있는 수의 합을 최대가 되도록조약돌 놓기 IST (Information Sciences & Technology) Laboratory
조약돌 놓기 문제(2/5) 패턴 1: 패턴 2: 패턴 3: 패턴 4: 가능한 패턴 IST (Information Sciences & Technology) Laboratory
조약돌 놓기 문제(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 서로 양립할 수 있는 패턴들
… … … -5 4 4 -5 조약돌 놓기 문제(4/5) i-1 i • 최적 부분구조를 이용 • i열까지의 최적해를 구하기 위해 i-1 열까지의 최적해를구성 • 최적 부분구조를 가진 문제를 재귀호출을 이용하여 구현을 한다면 또 중복호출이 발생 IST (Information Sciences & Technology) Laboratory
조약돌 놓기 문제(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
감사합니다 서국화 kookhwa@kunsan.ac.kr IST (Information Sciences & Technology) Laboratory