본문 바로가기

Archived(CSE)/알고리즘

Chap 3. Dynamic Programming

 - Merge sort를 접근하는 데 있어 Divide and Conquer는 적절하다, recursive도 맞을 수 있지만 overlapping이 문제가 되기에 bottom up으로 올라가는 게 맞을 수 있다

- XX로 시작되지 않는 문자열 나열하기는 Qk = 2Qk-1(Y~,Z~) + 2Qk-2(XY~, XZ~)

- Binomial coefficient 조합값 찾기 nCk = n-1Ck-1 + n-1Ck

 

- Floyd's Algorithm은 AFSP(All Fair Shortest Path) 찾기 문제이다. 

- 기본적인 접근법은 Dynamic Programming, 핵심 아이디어는 K를 거치느냐 안거치느냐

- Dk[i,j] (i~j로 가는 경로 중 k 이하 node를 거치는 경로) 를 다음과 같은 경우의 수로 나눈다

- K를 거치는 경우 <Dk-1[i,k] + Dk-1[k,j]>, 거치지 않는 경우 <Dk-1[i,j]> 이 둘 중 최소값을 찾으면 된다

- 실제 프로그래밍에서는 k를 따로 3차원 배열로 만들 필요가 없음(K는 이전 k값을 보고 계속 덮어 씌우면 됨)

- 모든 문제를 DP로 해결할 수 있는 것은 아니다, Principle of Optimality 가 있어야한다(최단 경로의 sub 경로도 최단)

 

- Chained Matrix Multiplication 문제, 행렬간의 곱셈을 할 때 어떻게 해야 곱셈을 최소화 할 수 있을까

- 기본적으로 M1(p*q) X M2(q*r) 을 진행하면 p*q*r 의 곱셈수가 발생

- 따라서 최소화하기 위해서는 DP를 활용해서 한다

- M[i,j] = M[i,k] + M[k+1,j] + d(i-1)d(k)d(j) 의 공식을 통해 구체화해나가는데 풀어나가는 방향은 대각선

 

- Traveling SalePerson 문제 

- 그래프의 모든 노드를 한 번만 방문하는데, 최단경로를 구하는 문제(오일러 사이클)

D[V1,{Vertex}] = v1 버텍스로부터 시작해서 Vertex를 한번씩 최단경로로 방문

- D[V1,{V2, V3, V4}] = min(W(1,j)+ D[j,A-{Vj}]) 의 공식을 통해 Dynamic programming

 

'Archived(CSE) > 알고리즘' 카테고리의 다른 글

기말 정리  (0) 2019.06.10
Chap 4. Greedy Approach  (0) 2019.04.18
Chap 2. Divide and Conquer  (0) 2019.04.17