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
- 코테
- 파티션 크기 조정
- 전화번호속의암호
- D드라이브생성
- Bfs와DFS
- 에라토스테네스의채
- 완탐
- 완전탐색
- 자바 코테
- java
- N과M
- 순열
- 재귀함수
- 주사위굴리기2
- 알고리즘개념
- 알고리즘
- BFS
- 백준
- 삼성역테
- 중복순열
- 23288
- 백준13458
- 백준15652
- 코테준비
- 정올 1620
- 중복조합
- 볼륨 만들기
- 정보처리기사
- 백준2251
- 자바
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