동적 프로그래밍 - 메모이제이션

2024. 7. 18. 22:52·Algorithm

동적 프로그래밍 메모이제이션

  • 동적 프로그래밍(Dynamic Programming, DP)은 복잡한 문제를 해결하기 위해 작은 부분 문제로 나누어 해결하는 방법.
  • 메모이제이션(Memoization)은 이미 계산한 결과를 저장해두고, 동일한 계산을 반복하지 않도록 하는 기술.

특징

  • 부분 문제의 중복: DP는 동일한 부분 문제를 여러 번 계산하는데, 메모이제이션을 통해 이를 방지합니다.
  • 탑다운 접근법: 재귀적으로 문제를 해결하면서, 이미 계산한 결과를 저장.
  • 공간 복잡도: 결과를 저장하기 위한 추가 메모리가 필요.

장단점

장점 단점
중복 계산 방지로 성능 향상 추가 메모리 사용
재귀적 접근으로 코드 가독성 향상 초기 메모리 할당 및 관리 필요
일부 문제에 대해 간단하고 효율적인 솔루션 제공 DP가 적용되지 않는 문제도 존재

 

시간복잡도

알고리즘 종류 시간 복잡도
피보나치 수열 (재귀) O(2^n)
피보나치 수열 (메모이제이션) O(n)
최장 공통 부분 수열 O(m * n)
배낭 문제 O(n * W)

 

자바스크립트 예시

function memoize(fn) {
    const cache = {};
    return function(...args) {
        const n = args[0];
        if (n in cache) {
            return cache[n];
        } else {
            const result = fn(n);
            cache[n] = result;
            return result;
        }
    };
}

function fibonacci(n) {
    if (n <= 1) {
        return n;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

const memoizedFibonacci = memoize(fibonacci);

console.log(memoizedFibonacci(10)); // 55
console.log(memoizedFibonacci(20)); // 6765
console.log(memoizedFibonacci(30)); // 832040

'Algorithm' 카테고리의 다른 글

트리 (Tree) - 트리와 이진트리  (6) 2024.07.23
동적 프로그래밍 - 타뷸레이션  (0) 2024.07.18
정렬 (Sort) - 퀵정렬  (0) 2024.07.16
정렬 (Sort) - 병합정렬  (0) 2024.07.16
정렬 (Sort) - 삽입정렬  (0) 2024.07.13
'Algorithm' 카테고리의 다른 글
  • 트리 (Tree) - 트리와 이진트리
  • 동적 프로그래밍 - 타뷸레이션
  • 정렬 (Sort) - 퀵정렬
  • 정렬 (Sort) - 병합정렬
예슬e
예슬e
예슬e
예슬e개발로그
예슬e
전체
오늘
어제
  • 분류 전체보기 (27)
    • 💙 At work in 2024 (0)
    • FrontEnd (7)
      • React (7)
      • Package Manager (0)
      • Build System (0)
      • Transpiler & Bundler (0)
      • Architecture (0)
      • Test (0)
    • BackEnd (2)
    • CS (8)
      • Data Structure (7)
      • Network (1)
    • Algorithm (10)
    • Project (0)
    • Blog (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

useEffect
jsx
리액트 파이버
메모이제이션
알고리즘
리렌더링
useCallback
리액트파이버
자료구조
자바스크립트배열
리액트딥다이브
리액트
백엔드
api만들기
타뷸레이션
하노이의탑
useState
자바스크립트
재귀
프론트엔드

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.3
예슬e
동적 프로그래밍 - 메모이제이션
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.