17, 18강 Dynamic Programming

계산 예시
왜? 어떤 변수가 행렬의 계산 결과에서 생략이 되느냐에 따라 다름

Ai = Pi-1*Pi의 차원의 행


Step1 Structure of an optimal solution (parenthesization 괄호치기 이용)
Ai~Aj까지 있을때 Ak를 기준으로 나눈다고 생각해보면,
(Ai~k까지의 cost) + (Ak+1~j까지의 cost) + (Ai~k * Ak+1~j의 cost)가 전체 cost가 됨
Ai~k까지의 하위 parenthesization은 전체의 최적의 괄호치기가 되어야하고, Ak+1~j까지의 하위 parenthesization은 전체의 최적의 괄호치기가 되어야한다.

Step2 A recursive solution (재귀적 구현, 말만 재귀지 반복문으로 구현!)
Ai~Aj까지의 곱하기에 대한 minimum cost(계산 cost에 대한 minimum)을 저장할 수 있는 m[i, j]를 만듦
m[i, j] = m[i, k] + m[k+1, j] + pi-1pkpj

재귀는 많은 시간이 걸린다. 재귀는 각 재귀 트리의 다른 분기점에서 각각의 하위 문제들을 직면할 수 있다. → 중복되는 하위 문제는 동적 프로그래밍의 2번째 특징이다. (1번째는 최적의 답이 최적의 하위 구조를 포함하는 )
Step3 Computing the optimal costs by bottom-up method

예시 m = 최소 cost / s = 최적의 cost는 어디서 split하면 될까?


Step4 Constructing an optimal solution

s[1~6] = 3 → s[1~3] , s[4~6] → (s[1~1],s[2~3]),(s[4~5],s[6~6]) →
((A1, (s[2~2],s[3~3])),((s[4~4],s[5~5]), A6)) → ((A1, (A2, A3)),((A4, A5), A6))

동적 프로그래밍의 요소
최적의 구조 : 하위 최적의 구조를 포함한다.
하위 문제의 중복 문제 : divide conquar은 중복되는 하위 문제를 계속 생성하여 실행시간이 다항적으로 늘어나는 반면, 동적 프로그래밍은 테이블을 이용함으로써 효율을 높일 수 있다.

최적의 구조에 대한 특징
Recursive Procedure for Matrix-Chain Multiplication

Memoization 메모이제이션


동적프로그래밍에 대해 더 공부해보자
Longest Common Subsequence LCS 최장 공통 부분 수열

