Memoization

김선우·2022년 6월 27일
0

Posting

목록 보기
43/60
post-thumbnail

Memoization은 주어진 입력값에 대한 결과를 저장함으로써 같은 입력값에 대해 함수가 한 번만 실행되는 것을 보장한다.

피보나치수열을 예로 들어보자.

함수 내에서 자기 자신을 다시 호출하여 작업을 수행하는 재귀함수를 구현할 때 동일한 계산을 반복해야하는 경우가 많다.

메모이제이션을 설명하기 가장 적합한 예제일 것이다.

f(n) 을 n 번째 피보나치 수 라고 했을 때, f(2)를 구할 때 f(1)은 1번 호출되고, f(4)를 구할 때는 3번, f(6)을 구할 때 8번...

이런식으로 중복되게 호출을 해야한다.

이런 중복 호출을 막기 위해서 이전에 호출된 값을 저장 해놓고 다음계산에 필요할 시 값만 가져와서 사용하면 실행시간을 대폭 줄일 수 있게된다.

let callCount = 0; // 연산 횟수

function fiboByMemoization(num, memo) {
  callCount++; // 연산 횟수 +1
  memo = memo || [];
  
  if(memo[num] !== undefined) {
    return memo[num];
  }  
  
  if(num <= 1) {
    memo[num] = num;
    return num;
  }
  
  memo[num] = fiboByMemoization(num - 2, memo) + fiboByMemoization(num - 1, memo);
  
  return memo[num];
}

fiboByMemoization(10);
console.log(callCount); // 19
profile
생각은 나중에..

0개의 댓글