반응형
질문
저는 방금 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
라는 유사한 데코레이터가 있습니다.
반응형
댓글