[DP] 최적화 DP 레시피
2021. 7. 10. 22:55ㆍ알고리즘 관련/[레시피]DP
최적화 문제 : ~의 최댓값을 반환하시오, ~의 최소는 무엇인가 등, 최대/최소/최단거리 등을 도출하는 모든 문제. DP는 태생적으로 최적화 문제를 효율적으로 해결하기 위해 태어남.
주의 : 문제가 최적 부분 구조일때 사용하세요!!!!
최적 부분 구조 (optimal substructure) : 지금까지의 선택과 상관 없이, 각 부분 문제를 최적으로 풀었을 시 전체 문제의 최적해를 도출할 수 있는 구조.
ex) 서울에서 부산까지 가는 최단 경로. 최단 경로는 항상 대전을 지남.
=> 부산 ~ 대전까지의 최단경로 (부분문제 최적해) + 대전 ~ 서울까지 최단경로 (부분문제 최적해) = 부산 ~ 서울까지 최단경로 (전체 최적해)
1. 최적해를 찾는 완전 탐색 알고리즘 설계.
2. 함수 반환 값의 정의 변환
- 전체 최적해를 반환하는 것이 아닌, 앞으로 남은 선택들에 대한 최적해를 반환하도록 부분 문제 정의를 바꿈.
3. 재귀 함수의 파라미터 축소
- 중복되는 부분문제를 더 많이 만들기!
4. 메모이제이션 적용.
- 만일 입력이 배열/문자열이라면 => 변환을 통해 메모이제이션 적용.
예시)
'알고리즘 관련 > [레시피]DP' 카테고리의 다른 글
[DP] 최적화 문제 실제 답 계산 레시피 (0) | 2021.07.14 |
---|---|
[DP] 메모이제이션 구현 레시피 (0) | 2021.07.06 |