[파이썬][리스트] 리스트와 메모이제이션(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)를 사용하여 메모이제이션을 구현한 것에 주목하세요. 딕셔너리는 키-값 쌍을 저장하며, 메모이제이션에서는 인덱스(또는 입력 값)를 키로 사용하여 결과를 저장합니다.

메모이제이션은 계산이 반복되는 경우에 특히 유용하며, 동적 프로그래밍 및 재귀적 알고리즘에서 성능을 향상시키는 데 도움이 됩니다.