DOTY
메모이제이션(Memoization) 본문
오늘 처음 알게 된 DP 에서 중요한거 같은 Memoization!!!
메모이제이션이야 ....? 아니면 메모아이제이션이야....?
쩃든,,,,
코드 두개를 비교 하면서 설명!
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
<코드 1>
fibo(int n) {
if(n == 1 || n == 2) return 1;
return (fibo(n-1) + ribo(n-2));
}
<코드 2>
fibo(int n) {
if(Memoization[n] == 0)
Memoization[n] = fibo(n-1) + fibo(n-2);
return Memoization[n];
}
처음에는 무슨 차이지... 싶었다.
코드 1은 그냥 한거고, 코드 2는 배열을 사용한것이다.
그런데 잘 생각해보면 코드 1에서 반복적으로 일어난 일들이 코드 2에서 메모이제이션을 하면서 안하고 바로 꺼내 쓸 수 있게 됬다.
피보나치와 관련된 문제들은 이런 방식으로 하면 시간이 매우 단축된다!!!!
실제로도 시간 복잡도는 Ω(1.6^n) 에서 Θ(n)로줄어든단다!!
https://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EC%9D%B4%EC%A0%9C%EC%9D%B4%EC%85%98
메모이제이션 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 메모이제이션(memoization)은 컴퓨터 프로그램이 동일한 계산을 반복해야 할 때, 이전에 계산한 값을 메모리에 저장함으로써 동일한 계산의 반복 수행을 제거하여
ko.wikipedia.org
https://www.acmicpc.net/problem/11726
11726번: 2×n 타일링
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
www.acmicpc.net
백준 문제는 메모이제이션과도 관련이 있는 문제인 듯 싶었다.
피보나치 문제기도 하지만!!!
'Algorithm > Concept' 카테고리의 다른 글
다익스트라 알고리즘 (Dijkstra Algorithm) (0) | 2023.01.27 |
---|---|
투 포인터 (Two Pointers Algorithm) (feat. 프로그래머스 - 보석 쇼핑) (0) | 2020.10.17 |
에라토스테네스의 체 (0) | 2020.10.06 |
DFS(Depth First Search) (0) | 2020.10.05 |
BFS(Breadth First Search) (0) | 2020.10.05 |