카테고리 없음
DP(Dynamic Programming) 동적 계획 알고리즘
dmscks3126
2024. 9. 11. 13:52
DP
더보기
- 동적 계획 (Dynamic Programming) 알고리즘은 그리디 알고리즘과 같이 최적화 문제를 해결하는 알고리즘이다.
- 동적 계획 알고리즘은 먼저 입력 크기가 작은 부분 문제들을 모두 해결한 후에 그 해들을 이용하여 보다 큰 크기의 부분 문제들을 해결하여, 최종적으로 원래 주어진 입력의 문제를 해결하는 알고리즘이다.
피보나치 수 DP 적용
더보기

- 피보나치 수는 부분 문제의 답으로부터 본 문제의 답을 얻을 수 있으므로 최적 부분 구조로 이루어져 있다.
1) 문제를 부분 문제로 분할한다.
- Fibonacci(n) 함수는 Fibonacci(n-1)과 Fibonacci(n-2)의 합
- Fibonacci(n-1)은 Fibonacci(n-2)와 Fibonacci(n-3)의 합
- Fibonacci(2)는 Fibonacci(1)과 Fibonacci(0)의 합
- Fibonacci(n)은 Fibonacci(n-1), Fibonacci(n-2), .... Fibonacci(2), Fibonacci(1), Fibonacci(0) 의 부분집합으로
나뉜다.
2) 부분 문제로 나누는 일을 끝냈으면 가장 작은 부분 문제부터 해를 구한다.
3) 그 결과는 테이블에 저장하고, 테이블에 저장된 부분 문제의 해를 이용하여 상위 문제의 해를 구한다.

피보나치 수 DP 적용 알고리즘
더보기
def fibo2(n):
f = [0] * (n + 1)
f[0] = 0
f[1] = 1
for i in range(2, n+1):
f[i] = f[i-1] + f[i-2]
return f[n]
DP의 구현 방식
더보기
- recursive 방식 : fib1()
- iterative 방식 : fi2()
- memoization을 재귀적 구조에 사용하는 것보다 반복적 구조로 DP를 구현한 것이 성능면에서 보다 효율적이다.
- 재귀적 구조는 내부에 시스템 호출 스택을 사용하는 오버헤드가 발생하기 때문이다.