일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- interceptor
- 서버
- JWT
- 정수론
- 클라우드네이티브
- jdbc programming
- 유클리드호제법
- springboot
- 알고리즘
- JDBC
- 컴퓨터
- AWS
- 개발공부
- 데이터베이스프로그래밍
- Exception Handling
- Database
- TDD
- 클라우드
- 리눅스공부
- 데브옵스
- 데이터베이스
- 트랜잭션
- 개발방법론
- EC2
- DB
- dbms
- 리눅스
- 시스템프로그래밍
- SpringSecurity
- 쿼리최적화
Archives
- Today
- Total
개발 블로그
동적계획법/다이나믹 프로그래밍(Dynamic Programming) 본문
동적 계획법: 특정 범위까지의 값을 구하기 위해서 그것과 다른 범위까지의 값을 이용하여 효율적으로 값을 구하는 알고리즘 설계 기법
*이미 했던 계산은 재활용하여 사용하기
-Top-down 형식
재귀로 구현, 큰 문제를 작은 문제로 쪼개나가면서 해결(memoization 활용)
아래 코드는 피보나치를 구하는 함수를 top down 형식으로 구현한 것이다.
int fib(int n){
if (n==1 || n==2)
return 1;
else if(f[n] > -1) //배열이 초기화 된 경우=이미 계산을 한 경우
return f[n];
else
return f[n] = fib(n-2) + fib(n-1);
}
Top down 형식은 재귀 오버헤드가 발생할 수 있다.
-Bottom up 형식
반복문으로 구현, 작은 문제부터 구해서 큰 문제를 해결
아래 코드는 피보나치를 구하는 함수를 bottom up 방식으로 구한 것이다.
int fib(int n){
f[1] = f[2] = 1;
for(int i=3; i<=n; i++)
f[i] = f[i-1] + f[i-2];
return f[n];
}
Bottom up 방식은 재귀를 array로 풀어낸 것이다.
'프로그래밍 > 알고리즘' 카테고리의 다른 글
유클리드 호제법 (1) | 2024.10.12 |
---|---|
비트마스크 알고리즘/ 집합 구현 (0) | 2024.01.28 |
순열과 조합 (0) | 2022.10.12 |
멱집합(PowerSet) (0) | 2022.10.12 |
Counting Cells in Blob(Blob 셀 수 세기) (0) | 2022.10.12 |