김민기
중복된 결과를 저장해, 동일한 부분이 발생했을 때 저장한 결과를 재활용해 실행 시간을 줄이는 알고리즘이다.
장점
예시) 피보나치 수열
def fibo(n):
if n <= 1:
return n
fib_numbers = [0, 1]
for i in range(2, n + 1):
fib_numbers.append(fib_numbers[i - 1] + fib_numbers[i - 2])
# 리스트에 이미 저장되어 있던 i-1, i-2 값을 재활용해서
# 반복적인 연산을 줄임.
return fib_numbers[n]
Example)
print(fibo(3))
1. i가 2부터 4까지 반복
i = 2일 때,
fib_numbers = [0, 1, 1(0 + 1) -> 값 재활용]
i = 3일 때,
fib_numbers = [0, 1, 1, 2(1 + 1) -> 값 재활용]
2. return에서 값 출력
2출력
단점
ex) 앞서 제시한 피보나치 문제에서 n = 1 n = 2 에서의 결과값을 저장해야 하므로 추가적인 메모리가 소모된다.