본문 바로가기
Data Structure & Algorithm

Dynamic Programming Steps

by Queen2 2022. 9. 25.
728x90
반응형

코딩문제에 단골로 등장하는 Dynamic Programming에 대해 더 알아보기 위해 공부한 유투브 동영상을 정리해봤습니다

 

https://www.youtube.com/watch?v=aPQY__2H3tE&t=10s&ab_channel=Reducible 

 

Dynamic Programming 이란?

 

- 부분문제(subproblem)을 식별하고 해결해서 큰 문제를 해결하는 방식

 

 


[ 5 Steps to solve DP ]

 

1. Longest Increasing Subsequence (LIS)

 

문제 정의하고 살펴보기

a1에서 a(n)까지 [3,1,8,2,5]가 있을 때, 1,2,5는 연속되면서 계속 증가하는 Subsequence 중에서 3개로 가장 긴 길이에 해당

 

2. Visualize Examples => Draw Acyclic directed Graph

 

 

  • LIS = Longest Path in DAG + 1
  • 노드의 개수 -> path의 개수 + 1

 

3. Find an appropriate subproblem 

  • All increasing subsequences are subsets of original sequence
  • All increasing subsequences have a start and end
  • Focus on the end index of an increasing subsequence is more intuitive

 

Subproblem: LIS[k] = LIS ending at index k

LIS[4] = 1 + max{LIS[0], LIS[1],LIS[3]}

 

 

4. Generalize the relationship

LIS[n] = 1 + max{LIS[k] | k < n, A[k] < A[n]}

 

 

5. Implement by solving subproblems in order

순방향, 역방향, 오름차순, 내림차순으로 전개해야 하는지 파악하기

여기서 Sequence를 얻는 방법은?

i 라는 index 값의 이전 sequence 값 = 이전 sequence 값이 위치한 index  j ==> prev[i] = j로 표현 가능함

 


 

Box Stacking 

(길이 L, 가로 W, 세로 H)인 n 개의 상자 리스트가 주어졌을 때, 가장 높이가 높은 stack을 찾으시오

 

  위의 법칙을 단계별로 따라보자면,

 

시각화해서 생각하기)

Subproblem ) 가장 높은 height는 밑에 쌓은 box의 합에 해당함

 

예를 들어 , height(4,5,3)이 밑에 가는 box stack의 높이는 

height(2,3,2) = 4 , height(2,4,1) = 3, height(1,2,2) = 2

==> 즉 height(4,5,3) = 3 + max{height(2,3,2), height(2,4,1),height(1,2,2)}

 

일반화 ) 

1. 박스위에 쌓여질 수 있는 box를 구한다

2. 그 중에서 최대 높이를 가장 아래 박스의 높이에 더한다

 

순서 정하기 )

 

 

동영상을 보면 기본적인 전개 과정은 이해가 가지만, 막상 문제상황에 닥쳤을 때

subproblem을 정하고 코드로 옮기기 까지 많은 연습이 필요한 것 같습니다!

728x90
반응형

'Data Structure & Algorithm' 카테고리의 다른 글

Trie (트라이, Digital tree, prefix, Retrieval tree) + 예제 코드  (0) 2022.09.27
Union Find  (0) 2022.09.26
Stack & Queue 개념 정리  (0) 2022.09.21
Singly & Doubly Linked List  (0) 2022.09.20
Big O notation & Array  (0) 2022.09.19

댓글