250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 완탐
- 23288
- N과M
- 백준13458
- 삼성역테
- 알고리즘개념
- D드라이브생성
- BFS
- 코테준비
- 완전탐색
- 알고리즘
- 백준
- 백준15652
- 코테
- 파티션 크기 조정
- 에라토스테네스의채
- 볼륨 만들기
- 중복조합
- 순열
- 중복순열
- 백준2251
- 자바 코테
- 자바
- 재귀함수
- 정올 1620
- java
- Bfs와DFS
- 주사위굴리기2
- 전화번호속의암호
- 정보처리기사
Archives
- Today
- Total
뚱땅뚱땅
[개념] 메모이제이션 기법에 대하여 본문
728x90
메모이제이션이란?
"컴퓨터 프로그램이 동일한 계산을 반복할 때, 이전에 계산한 값을 메모리에 저장함으로써 동일한 계산의 반복 수행을 제거해 프로그램 실행 속도를 빠르게 하는 기술"
피보나치 수열 예시
1. 일반적인 재귀함수를 이용할 경우
int fibonacci(int x){
if(x<=2) return 1;
return fibonacci(x-1) + fibonacci(x-2);
}
이미 계산한 내용을 계속 다시 계산하기 때문에, 필요없는 연산이 생겨 시간 복잡도가 증가한다. (O(2^n))
더보기
n= 5 일 때,
fibonacci(1) = 1
fibonacci(2) = 1
fibonacci(3) = fibonacci(1) + fibonacci(2)
fibonacci(4) = fibonacci(2) + (fibonacci(1)+ fibonacci(1))
fibonacci(5) = (fibonacci(1) + fibonacci(2))+(fibonacci(2) + (fibonacci(1)+ fibonacci(2)))
위와 같이 이미 계산한 값들을 다시 계산한다.
2. 메모이제이션 기법을 사용한 재귀함수
이미 계산한 내용은 저장하고, 연산할 때, 이미 저장된 값을 불러오면 된다. (O(n))
더보기
n = 5 일 때,
data[1] = fibonacci(1)
data[2] = fibonacci(2)
data[3] = data[1] + data[2] = fibonacci(3)
data[4] = data[2] + data[3] = fibonacci(4)
data[5] = data[3] + data[4] = fibonacci(5)
int data[100]; // 0으로 초기화된 배열
int fibo(int x){
if(x<=2) return 1;
// 이미 계산한 값을 갖고 있으므로 해당 값 리턴
if(data[x] !=0) return data[x];
else{
data[x] = fibo(x-1) + fibo(x-2);
return data[x];
}
}
* 참고한 블로그: hongku.tistory.com/161
728x90
'알고리즘 > 개념' 카테고리의 다른 글
[개념] 완전 탐색 기법 - 부분집합 편 (Java) (0) | 2021.07.14 |
---|---|
[개념] 완전 탐색 기법 - 순열, 조합, 중복 순열, 중복 조합 편 (Java) (1) | 2021.07.13 |
Comments