Java
LRU,동적계획법,메모이제이션
yougeun
2022. 10. 14. 19:44
728x90
LRU(Least Recently Used)
가장 오랫동안 참조되지 않은 페이지를 교체하는 방식
동적계획법(Dynamic Programming)
큰 문제를 한 번에 해결하기 힘들 때 작은 여러 개의 문제로 나누어서 푸는 기법
Top-down:상위 문제를 해결하기 위해서 하위 문제를 재귀적으로 호출하여 하위 문제를 해결함으로써 상위 문제를 해결하는 방식
bottom-up:하위에서부터 문제를 해결해나가면서 먼저 계산했던 문제들의 값을 활용해서 상위 문제를 해결해나가는 방식
메모이제이션(Memoization)
기존의 정보를 저장함으로써 같은 입력값에 대해 함수가 한번만 실행하게 됨
static int fibo(int x) {
if( x ==1 || x==2) return 1;
return fibo(x-1) + fibo(x-2);
}
재귀함수를 이용한 피보나치 수열
static int fibo(int x) {
if( x ==1 || x==2) return 1;
if(dp[x] != 0) return dp[x];
dp[x] = fibo(x-1) + fibo(x-2);
return dp[x];
}
동적계획법을 이용한 피노나치 수열(Top down)
static int fibo(int x) {
dp[1] =1;
dp[2] =1;
for(int i=3; i<x+1; i++) {
dp[i] = dp[i-1] + dp[i-2];
}
return dp[x];
}
동적계획법을 이용한 피노나치 수열(bottom up)
728x90