[알고리즘] 동적 프로그래밍이란?

유진·2023년 8월 31일

알고리즘-자료구조

목록 보기
15/15

📝 동적 프로그래밍이란?

특정 범위까지의 값을 구하기 위해서 그것과 다른 범위까지의 값을 이용하여 효율적으로 값을 구하는 알고리즘 기법이다.



🎯 동적 프로그래밍의 특징

  • 최적 부분 구조 문제에 효과적이다.
    ✔ 최적 부분 구조란 문제의 최적 해결 방법이 부분 문제에 대한 최적 해결 방법으로 구성된 구조를 의미한다.
  • 동일한 문제를 여러번 구해야 하는 문제는 메모이제이션(Memoization) 기법으로 해결한다.
    ✔ 메모이제이션(memoization)은 컴퓨터 프로그램이 동일한 계산을 반복해야 할 때, 이전에 계산한 값을 메모리에 저장함으로써 동일한 계산의 반복 수행을 제거하여 프로그램 실행 속도를 빠르게 하는 기술이다. 동적 계획법의 핵심이 되는 기술이다.



동적 프로그래밍 조건

  1. Simple subproblems - 큰 문제를 작은 문제로 나눌 수 있어야 한다.
  2. Optimal substructure - 최적의 해를 찾는 구조를 만들 수 있어야 한다.
  3. Overlapping problems - 작은 문제들이 중복되어야 한다.

동적 프로그래밍 문제 해결 방법

1. Top Down

  • 탑다운 방식은 말 그대로 위에서 아래로(큰 문제에서 작은 문제로) 해결해 나가는 방식이다.
  • 재귀 알고리즘을 사용하는 방식이다.
  • 메모이제이션 기법은 탑다운 방식일 때 사용된다.

2. Bottom Up

  • 바텀업 방식은 단순히 반복문을 통해서 가장 작은 문제에서 해결해야 하는 문제에 도달할 때까지 반복한다.

동적 프로그래밍 과정

  1. 최적해를 구할 수 있는 구조를 정의한다.
  2. 최적해의 값을 재귀적으로 정의한다.
  3. 캐싱을 사용하는 탑다운 방식이나 바텀업 방식으로 값을 계산한다.
  4. 계산된 값으로 최적의 해를 구한다.



참고자료

profile
도라에몽 암기빵

0개의 댓글