Tabulation과 Memoization은 반복되는 비용이 큰 계산을 하는 함수의 실행을 최적화하기 위해 사용되는 동적 프로그래밍 기술이다. 이 두 기술은 비슷한 목표를 가지고 있지만 몇 가지 차이점이 있다.
// Tabulation를 활용한 fibonacci
func fibonacci(_ x: Int ) -> Int {
var dp = [Int](repeating: 0, count: x + 1)
if x == 0 {
return 0
} else if x == 1 {
return 1
}
dp[1] = 1
for i in 2...x {
dp[i] = dp[i - 1] + dp[i - 2]
}
return dp[x]
}
- Caching) 오랜시간 걸리는 작업의 결과를 저장해서 시간과 비용을 필요로 회피하는 기법을 의미한다.
func fibonacci(_ x: Int) -> Int {
var cahce = [Int](repeating: 0, count: x + 1)
if x == 1 {
return 1
}
if x == 2 {
return 1
}
if cache[x] != 0 {
return cache[x]
}
cache[x] = fibonacci(x-1) + fibonacci(x-2)
return cache[x]
}
제가 학습한 내용을 요약하여 정리한 것입니다. 내용에 오류가 있을 수 있으며, 어떠한 피드백도 감사히 받겠습니다.
감사합니다.