본문 바로가기
Python/Python FAQ

Python 메모이제이션은 무엇이며, 파이썬에서 어떻게 사용할 수 있을까요?, What is memoization and how can I use it in Python?

by 베타코드 2023. 10. 24.
반응형

질문


저는 방금 Python을 시작했고 memoization이 무엇이며 어떻게 사용하는지 전혀 모르겠습니다. 또한, 간단한 예제를 볼 수 있을까요?


답변


메모이제이션은 메소드 호출의 결과를 메소드의 입력에 기반하여 기억하고, 결과를 다시 계산하는 대신 기억된 결과를 반환하는 것을 효과적으로 의미합니다. 이것을 메소드 결과의 캐시로 생각할 수 있습니다. 자세한 내용은 Introduction To Algorithms (3e), Cormen et al.의 387페이지를 참조하십시오.

파이썬에서 메모이제이션을 사용하여 팩토리얼을 계산하는 간단한 예제는 다음과 같습니다:

factorial_memo = {}
def factorial(k):
    if k < 2: return 1
    if k not in factorial_memo:
        factorial_memo[k] = k * factorial(k-1)
    return factorial_memo[k]

더 복잡하게 되어서 메모이제이션 프로세스를 클래스로 캡슐화할 수도 있습니다:

class Memoize:
    def __init__(self, f):
        self.f = f
        self.memo = {}
    def __call__(self, *args):
        if not args in self.memo:
            self.memo[args] = self.f(*args)
        #주의: 객체를 반환하는 경우 여기서 deepcopy를 수행할 수도 있습니다.
        return self.memo[args]

그런 다음:

def factorial(k):
    if k < 2: return 1
    return k * factorial(k - 1)

factorial = Memoize(factorial)

Python 2.4에서는 "데코레이터"라는 기능이 추가되어 이제 다음과 같이 간단하게 작성할 수 있습니다:

@Memoize
def factorial(k):
    if k < 2: return 1
    return k * factorial(k - 1)

Python Decorator Library에는 이곳에서 보여진 Memoize 클래스보다 조금 더 견고한 memoized라는 유사한 데코레이터가 있습니다.

반응형

댓글