Overlapping Subproblems (중복 부분 문제)
- Dynamic Programming은 큰 문제를 작은 하위 문제로 분할하는데, 이 때 하위 문제가 여러 번 반복되는 경우가 발생 할 수 있다. Dynamic Programming은 이러한 중복 부분 문제를 해결하여 중복 계산을 피하고, 계산 속도를 대폭 향상시킨다.
Memoization
- 중복 부분 문제를 해결하기 위해 이전에 계산한 결과를 저장하고 재사용하는 메모이제이션 기법이 사용된다. 이를 통해 중복 계산을 피하고 실행 시간을 줄일 수 있으며 메모이제이션은 일반적으로 배열 또는 해시 테이블을 사용하여 결과를 저장한다.
Bottom-up or Top-down Approach
- Dynamic Programming은 일반적으로 Bottom-up 또는 Top-down 접근 방식을 사용한다. Bottom-up 접근 방식은 작은 하위 문제부터 시작하여 차례대로 큰 문제까지 해결하는 반면, Top-down 접근 방식은 큰 문제를 해결하는 동안 필요한 하위 문제를 재귀적으로 호출하여 해결한다.