[python] 메모이제이션

메모이제이션은 프로그래밍에서 재귀 함수의 실행 속도를 향상시키기 위한 기술입니다. 재귀 함수는 동일한 입력에 대해서는 동일한 결과를 반환하기 때문에, 같은 입력을 가지고 있는 함수 호출을 반복적으로 수행하게 됩니다. 이때 메모이제이션은 함수의 반환 값을 캐시에 저장하여, 이후 동일한 입력이 들어오면 캐시에서 값을 가져오는 방식으로 중복 계산을 피할 수 있습니다.

파이썬에서는 functools 모듈의 lru_cache 데코레이터를 사용하여 메모이제이션을 구현할 수 있습니다. lru_cache는 가장 최근에 사용된 결과만 캐시에 저장하여 메모리를 효율적으로 사용할 수 있습니다.

from functools import lru_cache

@lru_cache(maxsize=None)  # 모든 결과를 캐시에 저장
def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(10))  # 55

위의 예제는 피보나치 수열을 재귀 함수로 구현한 것입니다. 메모이제이션을 사용하지 않는다면, 큰 숫자의 피보나치 수열을 구하는데 많은 시간이 필요할 수 있습니다. 하지만 lru_cache를 사용하여 메모이제이션을 적용하면, 중복 계산을 피하고 속도를 크게 향상시킬 수 있습니다.

메모이제이션은 복잡한 계산을 필요로 하는 알고리즘에서 유용하게 사용될 수 있습니다. 하지만 모든 함수에 메모이제이션을 적용하는 것은 항상 좋은 아이디어는 아닙니다. 함수의 실행 결과가 항상 동일한 경우에만 사용하거나, 입력 값의 범위가 크지 않은 경우에만 사용하는 것이 좋습니다.

참고 자료: