장성호's
장성호's blog
장성호's
  • 분류 전체보기
    • 알고리즘
      • 백준
      • 이론
    • WEB
      • Spring 인강
      • 네트워크
    • 개인 프로젝트
      • 쇼핑몰 만들기

블로그 메뉴

  • 홈
  • 깃허브
전체 방문자
오늘
어제
반응형
hELLO · Designed By 정상우.
장성호's

장성호's blog

[알고리즘] 동적 프로그래밍 (Dynamic Programming)
알고리즘/이론

[알고리즘] 동적 프로그래밍 (Dynamic Programming)

2021. 12. 27. 17:38
반응형

 

동적 프로그래밍이란?

  • 큰 문제를 작게 나누고, 같은 문제라면 한 번씩만 풀어 문제를 효율적으로 해결하는 알고리즘 기법
  • 하나의 문제를 단 한 번만 풀도록 하는 알고리즘 기법

조건

  1. 큰 문제를 작은 문제로 나눌 수 있다.
  2. 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일하다

 

피보나치수열

아래의 코드는 재귀를 사용해서 n-1번째 수를 구하는 코드입니다

int fibo(int n)
{
   if (n == 0 || n == 1)
      return n;
    else
      return fibo(n-1) + fibo(n-2);
}

위 코드를 사용해서 f(5)의 호출 과정을 그림으로 표현하면 아래와 같다

피보나치 수열

위의 사진을 보면 fibo(2) 함수가 3번 호출되어서 중복된 것을 확인할 수 있다

 

메모제이션 (Memoziation)

동적 프로그래밍 구현 방법 중 하나로 한 번 구한 결과를 메모리 공간에 저장해 두고 다시 활용하는 방법으로 중복을 줄이는 방법

int data[100] = {0,};
//메모제이션

int fibo(int n)
{
  if (n<=2) 
    return 1;
  if (data[n]==0)
    data[n] = fibo(n-1) + fibo(n-2);
  return data[n];
}

 

TOP-DOWN

큰 문제를 해결하기 위해 작은 문제를 호출한다는 개념

int data[100] = {0,};

int fibo(int n)
{
  if (n<=2) 
    return 1;
  if (data[n]==0)
    data[n] = fibo(n-1) + fibo(n-2);
  return data[n];
}

 

BOTTOM-UP

반복문을 사용해서 작은 문제부터 차근차근 답을 도출한다는 개념

int fibo(int n)
{
  data[0] = 0;
  data[1] = 1;
  for (int i=2; i<=n; i++)
    data[i] = data[i - 1] + data[i - 2];
  return data[n];
}

 

출처

[네이버 블로그] 20. 다이나믹 프로그래밍(Dynamic Programming) - 안경잡이개발자

https://blog.naver.com/ndb796/221233570962

 

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

다이나믹 프로그래밍은 프로그래밍 대회를 준비하시는 분에게는 절대 피할 수 없는 숙명입니다. 다이나믹 ...

blog.naver.com

 

반응형
저작자표시 비영리 변경금지 (새창열림)

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

[알고리즘] 유클리드 호제법 (Euclidean Algorithm)  (0) 2022.01.18
[자료구조] 덱 - Deque  (0) 2022.01.14
[자료구조] 큐 - Queue  (0) 2022.01.14
[자료구조] 스택 - Stack  (0) 2022.01.14
[알고리즘] 탐욕 알고리즘 (Greedy Algorithm)  (0) 2021.12.20
    '알고리즘/이론' 카테고리의 다른 글
    • [자료구조] 덱 - Deque
    • [자료구조] 큐 - Queue
    • [자료구조] 스택 - Stack
    • [알고리즘] 탐욕 알고리즘 (Greedy Algorithm)
    장성호's
    장성호's
    장성호's 개발 공부 블로그

    티스토리툴바