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 | 31 |
Tags
- SpringBoot
- 코드 시각화
- Python
- 문서객체모델
- 깃허브
- 헬생아
- 렌파이
- CSS
- 로그인 기능
- 쿼리 오류
- 웹 퍼블리싱
- MySQL
- nvl함수
- 타입 오류
- 자바스크립트
- jstl
- 코드 가시화
- 자바
- 그딴건없었다
- REACT
- 전처리도구
- SQL
- spring
- 1인개발
- 코드 이해하기
- 값 가져오기
- C언어
- react-three-fiber
- java
- jsp
Archives
- Today
- Total
This is it. it's IT.
다이나믹 프로그래밍(동적계획법) 본문
728x90
반응형
다이나믹 프로그래밍이라는 것은
큰 문제를 작은 단위로 나눠서 푸는 알고리즘이다.
방식 2개
1. Top - down
재귀함수를 사용
int memo[100];
int fibonacci(int n){
if(n <= 1){
return n;
} else {
if(memo[n] > 0){
return memo[n];
}
memo[n] = fibonacci(n-1) + fibonacci(n-2);
return memo[n];
}
}
2. Bottom - p
반복문을 사용
int d[100];
int fibonacci(int n) {
d[0] = 0;
d[1] = 1;
for (int i = 2; i <= n; i++){
d[i]= d[i-1] + d[i -2];
}
return d[n];
}
두 방법의 시간차이는 알 수 없음. 시간차이에 대해 고민할 필요 없음.
나에게는 2번째 방법이 더 맞는 것 같다.
이외에 문제를 작게 나눠서 푸는 알고리즘이 또 있다.
분할정복법 (divide & conquer)
D.P와의 차이점은, D.C알고리즘은 작은 문제가 절대로 중복되지 않는다는 점이다.
728x90