[파이썬][리스트] 리스트와 메모이제이션(Memoization) 개념과 예제
리스트와 메모이제이션(Memoization)은 컴퓨터 프로그래밍에서 효율적인 연산을 위해 사용되는 개념입니다. 메모이제이션은 중복 계산을 피하고 연산 결과를 캐시하여 실행 시간을 단축하는 기술입니다. 리스트를 사용하여 메모이제이션을 구현할 수 있습니다.
메모이제이션(Memoization) 개념:
메모이제이션은 이전에 계산한 결과를 저장하고, 같은 입력 값이 다시 나타날 때 이전 결과를 재사용하여 연산을 피하는 기술입니다. 주로 재귀 함수와 동적 프로그래밍에서 사용됩니다.
예제: 피보나치 수열 계산:
피보나치 수열은 메모이제이션을 사용하기 좋은 예제입니다. 피보나치 수열의 n번째 항을 구하는 함수를 메모이제이션을 사용하여 구현해 보겠습니다.
# 메모이제이션을 위한 딕셔너리 초기화
fibonacci_cache = {}
def fibonacci(n):
# 메모이제이션: 이미 계산한 값이 있다면 반환
if n in fibonacci_cache:
return fibonacci_cache[n]
# 피보나치 수열 계산
if n <= 2:
result = 1
else:
result = fibonacci(n - 1) + fibonacci(n - 2)
# 결과를 메모이제이션에 저장
fibonacci_cache[n] = result
return result
n = 10
print(f"피보나치 {n}번째 항: {fibonacci(n)}")
이 예제에서는 함수 fibonacci(n)
을 호출할 때마다 메모이제이션을 사용하여 계산 결과를 저장하고, 같은 인자로 함수가 다시 호출되면 저장된 결과를 반환합니다. 이렇게 하면 중복 계산을 피하고 계산 속도를 높일 수 있습니다.
리스트 대신 딕셔너리(fibonacci_cache
)를 사용하여 메모이제이션을 구현한 것에 주목하세요. 딕셔너리는 키-값 쌍을 저장하며, 메모이제이션에서는 인덱스(또는 입력 값)를 키로 사용하여 결과를 저장합니다.
메모이제이션은 계산이 반복되는 경우에 특히 유용하며, 동적 프로그래밍 및 재귀적 알고리즘에서 성능을 향상시키는 데 도움이 됩니다.