[Python] 다이나믹 프로그래밍

Hyunji·2022년 3월 22일
0

Python

목록 보기
12/13
post-thumbnail

다이나믹 프로그래밍 (Dynamic Programming)

  • 메모리를 적절히 사용하여 수행 시간 효율성을 비약적으로 향상시키는 방법
  • 이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장하여 다시 계산하지 않도록 한다
  • 다이나믹 프로그래밍의 구현은 일반적으로 두 가지 방식 (탑다운과 보텀업) 으로 구성된다
  • 동적 계획법 이라고도 부른다

일반적인 프로그래밍 분야에서의 동적(Dynamic)이란 어떤 의미를 가질까?

  • 자료구조에서 동적 할당(Dynamic Allocation)은 '프로그램이 실행되는 도중에 실행에 필요한 메모리를 할당하는 기법'을 의미
  • 반면에 다이나믹 프로그래밍에서 '다이나믹'은 별다른 의미 없이 사용된 단어

다이나믹 프로그래밍의 조건

: 다이나믹 프로그래밍은 문제가 다음의 조건을 만족할 때 사용할 수 있다

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

메모이제이션 (Memoization)

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

탑다운 VS 보텀업

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

6. 다이나믹 프로그래밍

profile
성장중인 개발자

0개의 댓글