목차
메모이제이션
메모이제이션이란 동일한 계산을 반복할 때, 이전에 계산한 값을 메모리에 저장함으로써 동일한 계산의 반복 수행을 제거하여 실행 속도를 빠르게 하는 기술입니다. 이는 동적 계획법(Dynamic Programming)에서 핵심이 되는 기술입니다. 캐싱이라고 표현되기도 합니다.
예를 들어 재귀 함수를 사용한 피보나치 수열 함수가 있다고 해봅시다.
func fibonacci(_ n: Int) -> Int {
if n <= 0 {
return 0
} else if n == 1 {
return 1
} else {
return fibonacci(n - 1) + fibonacci(n - 2)
}
}
재귀 함수를 사용하게 된다면 반복적으로 fibonacci 함수를 불러오기 때문에 불필요한 연산이 생기고,
실행 속도가 느려질 수 있습니다.
따라서 다음과 같이 메모리에 값을 저장하고 해당 값을 불러옴으로써 실행 속도를 빠르게 해줄 수 있습니다.
func fibo(_ n: Int) -> Int {
var fiboArray: [Int] = [0, 1]
guard n > 1 else { return n }
for num in 2...n {
fiboArray.append(fiboArray[num - 2] + fiboArray[num - 1])
}
return fiboArray[n]
}
728x90
'CS > 알고리즘 (Algorithm)' 카테고리의 다른 글
[알고리즘] 누적 합 (0) | 2023.09.08 |
---|---|
[알고리즘] 슬라이딩 윈도우(Sliding Window) (0) | 2023.09.01 |
[알고리즘] 투 포인터(Two Pointer) (0) | 2023.09.01 |
[알고리즘] LCS (0) | 2023.08.14 |
메모이제이션
메모이제이션이란 동일한 계산을 반복할 때, 이전에 계산한 값을 메모리에 저장함으로써 동일한 계산의 반복 수행을 제거하여 실행 속도를 빠르게 하는 기술입니다. 이는 동적 계획법(Dynamic Programming)에서 핵심이 되는 기술입니다. 캐싱이라고 표현되기도 합니다.
예를 들어 재귀 함수를 사용한 피보나치 수열 함수가 있다고 해봅시다.
func fibonacci(_ n: Int) -> Int {
if n <= 0 {
return 0
} else if n == 1 {
return 1
} else {
return fibonacci(n - 1) + fibonacci(n - 2)
}
}
재귀 함수를 사용하게 된다면 반복적으로 fibonacci 함수를 불러오기 때문에 불필요한 연산이 생기고,
실행 속도가 느려질 수 있습니다.
따라서 다음과 같이 메모리에 값을 저장하고 해당 값을 불러옴으로써 실행 속도를 빠르게 해줄 수 있습니다.
func fibo(_ n: Int) -> Int {
var fiboArray: [Int] = [0, 1]
guard n > 1 else { return n }
for num in 2...n {
fiboArray.append(fiboArray[num - 2] + fiboArray[num - 1])
}
return fiboArray[n]
}
728x90
'CS > 알고리즘 (Algorithm)' 카테고리의 다른 글
[알고리즘] 누적 합 (0) | 2023.09.08 |
---|---|
[알고리즘] 슬라이딩 윈도우(Sliding Window) (0) | 2023.09.01 |
[알고리즘] 투 포인터(Two Pointer) (0) | 2023.09.01 |
[알고리즘] LCS (0) | 2023.08.14 |