1. 컴퓨터 공학 스터디 W1 자료구조와 알고리즘
동적 계획법 Dynamic Programming
2. 컴퓨터 공학 스터디 W1 자료구조와 알고리즘
동적 계획법 1
피보나치 수열 Fibonacci numbers
• 제2항까지는 1, 제3항부터는 바로 앞의 두 수를 더한 수
(0), 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89…
재귀를 이용해 피보나치 수열의 n번째 수를 구하는 함수
int fib(int n)
{
if (n<=2)
return 1;
else
return fibo(n-1) + fibo(n-2);
}
7. 컴퓨터 공학 스터디 W1 자료구조와 알고리즘
동적 계획법 3
동적 계획법의 등장
• 처음 진행되는 연산은 기록, 진행되었던 연산은 기록된 값을 이용해 연산 횟수를 줄인다.
메모이제이션(Memoization)
int fiboData[100] = {0,};
int fibo(int n)
{
if (n<=2)
return 1;
if (fiboData[n]==0)
fiboData[n] = fibo(n-1) + fibo(n-2);
return fiboData[n];
}
DP를 이용해 피보나치 수열의 n번째 수를 구하는 함수
8. 컴퓨터 공학 스터디 W1 자료구조와 알고리즘
동적 계획법 4
개념
•문제를 풀기 위해 한 문제를 여러 개의 하위 문제로 나누어 푼 다음, 그것들을 결합하여 최종적인 목적에
도달한다.
•하위 문제를 해결한 뒤 그 해결책을 저장하여 똑같은 문제 발생 시 간단하게 해결한다.
A B
1
2
3
모든 방법을 검토한 후 가장 짧은 2번을 선택한다
9. 컴퓨터 공학 스터디 W1 자료구조와 알고리즘
동적 계획법 5
장점과 단점
•모든 방법을 일일이 검토하여 최적의 해를 찾아내는 방식
•그리디 알고리즘(탐욕 알고리즘)
•모든 해를 구하지 않고 순간순간 최적의 해를 찾는 방식
•그리디 알고리즘으로 도출된 값이 항상 최적의 해라고는 할 수 없다
•동적 계획법은 그리디 알고리즘에 비해 시간이 오래 걸리나, 결과적으로 항상 효율적인 값을 구할 수 있다.