Problem Solving

동적 계획법(DP, Dynamic Programming) 과 메모이제이션(Memoization)

limdef 2023. 7. 1. 19:48

DP와 메모이제이션 개념

동적 계획법 (dp) - 복잡한 문제를 작은 부분 문제(subproblem)으로 쪼개어, 각 부분 문제의 최적해를 계산하여 중복 계산을 피하면서 전체 문제의 최적해를 찾는 알고리즘 설계 기법. 전체 문제의 하위 부분 문제의 답으로부터 전체의 답을 구하는 방법.

 

메모이제이션 - 중복 계산을 피하기 위해 계산 결과를 따로 저장해놓는 기법. dp 에서 사용되는 기법 중 하나이다. dp에 포함되는 개념.

 

 

DP의 2가지 주요 요소

1. Optimal Substructure (최적 부분 구조) : 하위 문제의 최적해로부터 전체 문제의 최적해를 구할 수 있음.

2. Overlapping sub-problems (겹치는 부분 문제) : 동일한 부분문제가 여러번 반복적으로 해결되는 현상. 메모이제이션을 사용하여 계산 결과를 저장하여 활용.

 

DP는 2가지 방법으로 해결 가능

1. Top-down : 재귀를 사용하는 방식.

큰 문제 해결하기 위해 재귀 함수 호출 -> 작은 부분 문제들 해결하기 위해 자기 자신 호출 -> 이 과정에서 중복 계산 피하기 위해 테이블에 저장.

 

2. Bottom-up : 작은 부분 문제부터 시작하여 상향식으로 문제 해결.

작은 부분 문제 해결하기 위해 반복문 -> 작은 부분 문제들의 최적해를 계산하고, 그 결과 저장. -> 이전에 계산한 작은 부분문제들의 최적해로 점진적으로 큰 문제 해결 -> 전체 문제 최적해 구함.

 

Top-down으로 해결 가능하면 반드시 Bottom-up으로 해결이 가능할까?

 => 반드시 가능. 반복문이냐 재귀냐의 차이만 있다.

 

분할 정복과 DP의 차이

분할 정복은 동일한 부분 문제를 여러번 사용하지는 않음. 즉 Overlapping sub-problems의 요소가 없음.