Optimization problem
- 문제를 해결하는 최적의 답을 찾아야 하는 문제
- optimal solution은 하나 이상일 수 있다.
- maximum 혹은 minimum value를 가지는 솔루션을 찾는 문제들이 주를 이룬다.
- ex) 가장 빨리 도착하는 경로의 소요 시간은? 언제 주식을 사고 팔 때 가장 수익이 높은지?
다이나믹 프로그래밍(DP, Dynamic programming)
- optimization problem을 해결하는 전략 중 하나
- subproblem(s)의 optimal solution(s)을 활용해서 문제의 optimal solution을 찾는 방식
- 겹치는(overlapping) subproblems은 한 번만 계산하고 그 결과를 저장한 뒤 재사용한다.
DP의 두 가지 접근 방식
Top-Down approach | Bottom-Up approach (주로 사용) | |
구조 | recursive | iterative |
subproblem 결과 저장 | memoization | tabulation |
언제 선호되는지? | subproblems의 일부만 계산해도 최종 optimal solution을 구할 수 있을 때 | 모든 subproblems를 계산해야 최종 optimal solution을 구할 수 있을 때 |
알고리즘 설계 순서
1. 주어진 문제의 optimal solution이 구조적으로 어떤 특징을 가지는지 분석
2. 재귀적인 형태로 optimal solution의 value를 정의
3. (주로) Bottom-Up 방식으로 optimal solution의 value를 구한다.
(4. 지금까지 계산된 정보를 바탕으로 optimal solution을 구한다.)
DP를 사용하기 위해 확인해야 할 두 가지 조건
1. optimization problem이 optimal substructure여야 한다.
- optimization problem의 optimal solution이 subproblem(s)의 optimal solution(s)을 포함하는 구조
- subproblems는 독립적이어야 한다. => subproblem의 solution은 다른 subproblem solution에 영향을 줘선 안 된다.
2. optimization problem이 overlapping subproblems을 가져야 한다.
- 재귀적 형태의 알고리즘이 동작할 때 동일한 subproblems을 여러 번 해결해야 한다면 이 optimization problem은 overlapping subproblems을 가진다고 표현한다.
'공부 기록 > 영상 후기' 카테고리의 다른 글
[10분 테코톡] 카프카의 탐색 알고리즘 (0) | 2023.08.04 |
---|---|
네이버의 MongoDB 활용 사례 및 Cloud DB 소개 : MongoDB X NAVER Cloud 2021 Online Conference (0) | 2023.06.27 |
divide and conquer, 분할정복이라고 하죠~ 개념과 동작 방식을 설명하구요, merge sort를 통해 divide & conquer가 어떻게 동작하는지 살펴봅니다~ (0) | 2023.06.11 |
스프링 부트 2.0 Day 31. Redis 사용하기 (0) | 2023.06.06 |
[10분 테코톡] 리차드의 @Transactional (0) | 2023.06.05 |