240125_Dynamic Programming

추성결·2024년 1월 25일
0

참조: https://www.youtube.com/watch?v=GtqHli8HIqk
참조: https://galid1.tistory.com/507

1. Dynamic Programming이란

먼저, Optimization Problem(최적화 문제)에 대해 알아보자
Optimization Problem(최적화 문제)
  • 문제를 해결하는 최적의 답(Optimal Solution)을 찾아야 하는 문제
  • Optimal Solution은 하나 이상일 수 있다.
  • Maximum 혹은 Minimum Value를 가지는 Solution을 찾는 문제들이 주를 이룬다.

ex

1. 가장 빨리 도착하는 경로의 소요 시간은?
-> 여기서 소요 시간은 Value이며, 경로 자체는 Solution이 된다

2. 언제 주식을 사고 팔 때 가장 수익이 높은지?
-> 마찬가지로, 주식을 사고 팔 때 자체가 Solution이 되며 수익이 Value가 된다.

Dynamic Programming(DP)
  • 이러한 Optimization Problem을 해결하는 전략 중 하나
  • Subproblem(s)의 Optimal Solution(s)를 활용해서 문제의 최적의 해를 찾는 방식
  • 겹치는(Overlapping) Subproblem은 한번만 계산하고, 그 결과를 저장한 뒤 재사용한다.


2. Dynamic Programming 접근 방식

Top-Down 방식
  • Divide and Conquer와 비슷하지만 DP의 경우 작은 부분의 문제의 답이 항상 같아야한다.
  • 재귀함수로 구현하여 큰 문제를 진입하여 만약 풀리지 않는다면, 작은 문제부터 풀어나가는 식이다.
  • Memoization: Function Call 결과를 저장해서 이 후에 같은 input에 대한 호출은 저장한 결과를 사용하는 것
Bottom-Up 방식
  • for loop를 돌며 작은 문제부터 차근차근 구해나아가는 방법.


3. DP를 사용한 알고리즘 설계 순서

  • 순서는 다음과 같다.
    1. 주어진 문제의 Optimal Solution이 구조적으로 어떤 특징을 가지는 지 분석한다.
    2. 재귀적인 형태로 Optimal Solution의 value를 정의한다.
    3. 위의 주어진 방식으로 Optimal Solution의 value를 구한다.
    4. 지금까지 계산된 정보를 바탕으로 Optimal Solution을 구한다.


4. DP를 활용한 예제 문제

Climbing Stairs

Top-Down 방식

  • 주어진 문제를 subproblem들로 나눈다.

  • 이렇게 재귀적으로 나누고, n값에 6을 호출한다면 오른쪽 표와 같이 중복된 값들이 나오게 된다.
  • 이렇게 겹치는(Overlapping) Subproblem은 처음 한번만 계산하고, 결과를 메모해 뒀다가 이 후에 재사용하는 방식으로 설계한다.

  • 이렇게 설계한다면, 중복되는 c(1), c(2), c(3), c(4)를 재사용하게 된다.

Bottom-Up 방식



5. 예제의 시간 복잡도

0개의 댓글

관련 채용 정보