위키득계정 ↗
기술

메모이제이션

메모이제이션기술
영문명
Memoization
저장 대상
입력에 대응하는 결과
주요 효과
같은 계산의 반복 감소
비용
저장 공간과 조회 관리
메모이제이션은 함수의 입력과 계산 결과를 저장해 두었다가 같은 입력이 다시 들어오면 저장한 결과를 사용하는 기법이다. 반복되는 부분 문제의 중복 계산을 줄이는 데 쓰인다.

입력을 키로 사용

계산 전에 해당 입력의 결과가 저장되어 있는지 확인한다. 있으면 바로 돌려주고 없으면 계산한 뒤 저장한다. 입력을 구별하는 키가 부정확하면 서로 다른 계산에 같은 결과를 재사용하는 오류가 생긴다.

재귀 계산의 예

피보나치 수를 단순 재귀로 계산하면 같은 작은 번호를 여러 경로에서 다시 계산한다. 번호별 결과를 저장하면 이미 구한 부분 문제를 다시 전개하지 않아도 된다. 재귀를 쓰는 것 자체와 저장을 통해 중복을 줄이는 것은 다르다.

결과가 달라지는 함수

같은 인수를 주어도 시간이나 외부 상태에 따라 결과가 바뀌면 이전 결과의 재사용이 올바르지 않을 수 있다. 외부 상태를 키에 포함하거나 갱신 기준을 정해야 한다. 매 호출의 부수 효과가 필요한 함수도 그대로 메모화하기 어렵다.

공간과 동시 호출

저장 항목이 계속 늘면 메모리 사용도 증가한다. 크기 제한과 제거 정책을 둘 수 있지만 제거한 입력은 나중에 다시 계산할 수 있다. 또한 캐시 자료구조가 동시 접근에 안전하다는 사실만으로 같은 입력의 동시 계산이 한 번만 실행된다는 보장은 없다.

관련 문서

함수 / 재귀 / 피보나치 수열 / 동적 계획법 / 해시 테이블 / 캐시 / 알고리즘 / 시간 복잡도