[알고리즘] DP : 다이나믹 프로그래밍

coco00·2024년 8월 30일

알고리즘

목록 보기
7/8

DP 사용 조건

  1. 최적 부분 구조: 큰 문제를 작은 문제로 나눌 수 있고, 작은 문제의 답을 모아 큰 문제를 해결할 . 수있음
  2. 중복되는 부분 문제: 동일한 작은 문제를 반복적으로 해결.

Memoization

  • 메모이제이션은 다이나믹 프로그래밍을 구현하는 방법 중 하나.
  • 한 번 계산한 결과를 메모리 공간에 메모하는 기법
    - 같은 문제를 다시 호출하면 메모했던 결과를 그대로 가져옴.
    • 값을 기록해 놓는다는 점에서 캐싱이라고도 함.

탑다운 vs 바텀업

  • 탑다운(memoization) 방식은 하향식이라고도 하며, 바텀업 방식은 상향식이라고도 함.
  • 다이나믹 프로그래밍의 전형적인 형태는 바텀업.
    - 결과 저장용 리스트는 DP 테이블이라고 부름.
  • 엄밀히 말하면 메모이제이션은 이전에 계산된 결과를 일시적으로 기록해 놓는 넓은 개념을 의미.
    - 따라서 메모이제이션은 다이나믹 프로그래밍에 국한된 개념 X
    • 한 번 계산된 결과를 담아 놓기만 하고 다이나믹 프로그래밍을 위해 활용하지 않을 수도 있음.

DP vs Divide And conquer

  • 다이나믹 프로그래밍과 분할 정복 모두 최적 부분 구조를 가질 때 사용 가능.
    - 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아 큰 문제를 해결할 수 있는 상황.
  • 다이나믹 프로그래밍과 분할 정복의 차이점은 부분 문제의 중복
    - 다이나믹 프로그래밍 문제에서는 각 부분 문제들이 서로 영향을 미치며 부분 문제가 중복됨.
    • 분할 정복 문제에서는 동일한 부분 문제가 반복적으로 계산 X.

DP 문제에 접근하는 방법

  • 주어진 문제가 다이나믹 프로그래밍 유형임을 파악하는 것이 중요.
  • 가장 먼저 그리디, 구현, 완전 탐색 등의 아이디어로 문제를 해결할 수 있는지 검토.
    - 다른 알고리즘으로 풀이가 떠오르지 않을 경우 DP를 고려할 것.
  • 재귀 함수로 비효율적인 완전 탐색 프로그램을 작성한 뒤 탑다운 작은 문제에서 구한 답이 큰 문제에서 그대로 사용될 수 있으며, 코드를 개선하는 방법을 사용할 수 있음.

참고

https://www.youtube.com/watch?v=5Lu34WIx2Us&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=6

0개의 댓글