복잡한 문제를 더 간단한 부분 문제로 나누어 해결하는 알고리즘 기법
주로 최적화 문제에 사용
큰 문제를 해결하기 위해 부분 문제의 해를 재사용
Memoization 혹은 Tabulation 두 가지 방법 중 하나로 구현
탑다운, 하향식 접근법
바텀업, 상향식 접근법
def fib(n):
if n <= 1:
return n
return fib(n-1) + fib(n-2)
fib(4)를 계산하기 위해서 fib(3), fib(2)를 호출def fib(n, memo={}):
if n in memo:
return memo[n]
if n <= 1:
return n
memo[n] = fib(n-1, memo) + fib(n-2, memo)
return memo[n]
탭뷸레이션
def fib(n):
if n <= 1:
return n
dp = [0] * (n+1)
dp[1] = 1
for i in range(2, n+1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]