September 26, 2021
다이나믹 프로그래밍
- 다이나믹 프로그래밍은 메모리를 적절히 사용하여 수행 시간 효율성을 비약적으로 향상시키는 방법이다.
- 이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장하여 다시 계산하지 않도록 한다.
- 다이나믹 프로그래밍의 구현은 일반적으로 두 가지 방식으로 구성된다.
- Top Down(하향식)
- Bottom Up(상향식)
- 다이나믹 프로그래밍은 동적 계획법이라고도 부른다.
다이나믹 프로그래밍의 조건
- 최적 부분 구조(Optimal Substructure) : 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있다.
- 중복되는 부분 문제(Overlapping Subproblem) : 동일한 작은 문제를 반복적으로 해결해야 한다.
피보나치 수열
피보나치 수열은 다이나믹 프로그래밍으로 효과적으로 계산할 수 있다.

메모이제이션(Memoization)
- TopDown 방식
- 메모이제이션은 다이나믹 프로그래밍을 구현하는 방법 중 하나이다.
- 한 번 계산한 결과를 메모리 공간에 메모하는 기법이다.
- 같은 문제를 호출하면 메모했던 결과를 그대로 가져온다.
- 값을 기록해 놓는다는 점에서 Caching이라고도 한다.
탑다운 VS 보톰업
- 탑다운(메모이제이션) 방식은 하향식이라고도 하며, 보톰업 방식은 상향식이라고도 한다.
- 다이나믹 프로그래밍의 전형적인 형태는 보톰업 방식이다.