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

2023. 7. 19. 12:00·알고리즘/알고리즘 정리
728x90

 다이나믹 프로그래밍(동적 계획법) 이란?

다이나믹 프로그래밍은 재귀에 대한 최적화이다.

이말은 중복된 부분에 대한 문제가 있다면, 이에 대한 결과를 저장해둔다. 그리고 동일한 부분에서의 문제가 다시 발생한다면, 이 결과를 재사용하는 방법이다.

 

이런 사례는 피보나치 수열에서 쉽게 찾아볼 수 있다.

피보나치 수열의 점화식은 다음과 같다. 

f(n) = f(n - 1) + f(n - 2)

이때 n = 4라고 한다면,

f(4) = f(3) + f(2)

를 구해야 하는데, 이때 전에 구해두었던 f(3) 과 f(2)의 값을 다시 구하지 않고 저장해두었다가 다시 사용하는 것을 의미한다.


특징

  • 커다란 문제를 나누어 해결하는 편이다.
  • 앞서 말했듯이, 이전에 풀었던 문제와 동일한 문제일 경우, 다시 연산 하는 것이 아니라 이전의 결과를 사용한다.
  • 인접한 항들 간의 관계를 통해 점화식을 이용한다.
  • 시간과 공간면에서 효율적이다.

점화식

  • 인접한 항들 간의 관계식
  • 동적 계획법 문제를 풀 때는, 점화식을 세우고 문제를 해결하면 효율적으로 해결할 수 있다.

ex) 피보나치 문제 점화식 = f(n) = f(n - 1) + f(n - 2)


다이나믹 프로그래밍에서의 Top-Down 방식과 Bottom-Up 방식

DP(다이나믹 프로그래밍)은 원래 Bottom-Up 방식이지만, Top-Down 방식도 사용할 수 있다.

 

Top-Down

  • 위에서 아래로 순차적으로 문제를 해결하는 방식
  • 재귀함수를 사용하여 문제를 해결

Bottom-Up

  • 아래서 위로 순차적으로 문제를 해결하는 방식
  • 반목문을 사용하여 문제를 해결

연관 문제

 

문제 - 1 페이지

 

www.acmicpc.net

 

저작자표시 (새창열림)

'알고리즘 > 알고리즘 정리' 카테고리의 다른 글

인접 행렬 & 인접 리스트 (Adjacency Matrix & Adjacency List)  (1) 2023.08.11
분할 정복 (Devide & Conquer)  (0) 2023.07.22
그리디 알고리즘 (Greedy Algorithm)  (0) 2023.07.20
백트래킹(Back Tracking)  (0) 2023.07.17
'알고리즘/알고리즘 정리' 카테고리의 다른 글
  • 인접 행렬 & 인접 리스트 (Adjacency Matrix & Adjacency List)
  • 분할 정복 (Devide & Conquer)
  • 그리디 알고리즘 (Greedy Algorithm)
  • 백트래킹(Back Tracking)
기짜낭
기짜낭
생각이 많지만, 지금 내가 해야할 것을 하자.
  • 기짜낭
    So tired
    기짜낭
    • 분류 전체보기 (199)
      • 개발 (11)
        • Javascript (19)
        • Typescript (5)
        • Canvas (8)
        • React (13)
        • C (3)
      • 활동 (63)
        • 개인 프로젝트 (33)
        • 나눔 서포터즈 3기 (9)
        • 멋쟁이 사자처럼 (7)
        • 0&1 C++ 자료구조 스터디 (0)
        • 제 9회 창업 아이디어톤 (3)
        • Poom (ZeroWasteShop) (3)
        • 해커톤 (2)
        • 우테코 프리코스 7기 (6)
      • 알고리즘 (27)
        • 알고리즘 정리 (5)
        • 백준 (18)
        • 프로그래머스 (4)
      • 강연 (7)
      • 독서 (18)
      • 회고 & 생각 (16)
        • 연간회고 (4)
      • 기타 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • ※ 예전 블로그
  • 인기 글

  • 태그

    우테코
    HTML
    군대
    한양대학교
    3기
    개발자
    ES6
    타입스크립트
    프론트엔드
    독서
    Erica
    디자인
    HTML5
    독후감
    프로그래밍
    개념
    백준
    tutorial
    TypeScript
    react
    1주에 1권씩
    에리카
    프로젝트
    알고리즘
    canvas
    1주 1권
    개발
    Javascript
    CSS
    대학
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
기짜낭
다이나믹 프로그래밍(Dynamic Programming)
상단으로

티스토리툴바