다이나믹 프로그래밍

suhan cho·2022년 3월 10일
0

다이나믹 프로그래밍

  • 메모리를 적절히 사용하여 수행시간 효울성을 비약적으로 향상시키는 방법

  • 이미 계산된 결과(작은문제)는 별도의 메모리 영역에 저장하여 다시 계산하지 않도록 합니다.

  • 일반적으로 두 가지 방식(탑다운과 보텀업)으로 구성됩니다.

  • 동적 계획법이라고도 부른다.

  • 일반적인 프로그래밍 분야에서의 동적이란

    • 자료구조에서 동적 할당은 프로그램이 실행되는 도중에 실행에 필요한 메모리를 할당하는 기법
    • 다이나믹 프로그래밍의 다이나믹은 별다른 의미 없음
# 피보나치 함수(Fibonacci Function)을 재귀함수로 구현
def fibo(x) :
    if x == 1 or x == 2:
        return 1
    return fibo(x-1) + fibo(x-2)
print(fibo(4))


단순 재귀 함수로 해결하면 지수 시간 복잡도를 갖음
f(2)가 중복 호출 됨

  1. 최적 부분 구조
    • 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있습니다.
  2. 중복되는 부분 문제
    • 동일한 작은 문제를 반복적으로 해결해야한다.

메모이제이션

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

탑다운 VS 보텀업

  • 탑다운(메모이제이션)방식은 하향식이라고도 하며 보텀업 방식은 상향식이라고도 한다.
  • 다이나믹 프로그래밍은 전형적인 형태는 보텀업이다.
    • 결과 저장용 리스트는 DP테이블이라고 부른다.
  • 메모이제이션은 이전에 계산된 결과를 일시적으로 기록해 놓는 넓은 개념을 의미
    • 메모이제이션은 다이나믹 프로그래밍에 국한된 개념이 아님
    • 한번 계산된 결과를 담아 놓기만 하고 다이나믹 프로그래밍을 위해 활용하지 않을 수도 있다.
profile
안녕하세요

0개의 댓글