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
- 백준
- Spring Cloud Feign
- 디자인 패턴
- Kafka
- DP
- 오라클
- db
- 운영체제
- MVC
- feign
- 페이징
- Spring Cloud
- MST
- 알고리즘
- SQL
- 클라우드
- aws
- retry
- 코딩
- Spring Boot
- PL/SQL
- 쿼리
- 자료구조
- Spring
- golang
- Jenkins
- 데이터베이스
- 자바
- Intellj
- JPA
Archives
- Today
- Total
justgo_developer
동적계획법(Dynamic programming)-2 본문
728x90
반응형
행렬 경로 문제
- 정수들이 저장된 n x n 행렬의 좌상단에서 우하단까지 이동한다.
단 오른쪽이나 아래쪽 방향으로만 이동할 수 있다.
- 방문한 칸에 있는 정수들의 합이 최소화되도록 하라.
Recursive algo.
int mat(int i, int j)
{
if (i==1 && j==1)
return m[i][j];
else if(i==1)
return mat(1,j-1) + m[i][j];
else if(j==1)
return mat(i-1,1) + m[i][j];
else
return Math.min(mat(i-1,j) , mat(i,j-1) ) + m[i][j];
}
=> 비효율적
Memoization
:계산된 결과값을 캐시에 저장
int mat(int i, int j)
{
if(L[i][j] != -1)
return L[i][j];
if (i==1 && j==1)
L[i][j] = m[i][j];
else if(i==1)
L[i][j] = mat(1,j-1) + m[i][j];
else if(j==1)
L[i][j] = mat(i-1,1) + m[i][j];
else
L[i][j] = Math.min(mat(i-1,j) , mat(i,j-1) ) + m[i][j];
return L[i][j];
}
Bottom-up
: 특정한 방향이 있는게 아니라 순환식의 오른쪽 값이 먼저 계산되는 거
Common Trick
인덱스가 0부터 시작하기 떄문에 0인 자리에 무한대 값을 채워넣으면
코드가 단순해진다.
경로구하기
728x90
반응형
'IT > 알고리즘' 카테고리의 다른 글
Dynamic Programming(LCS) (0) | 2018.01.17 |
---|---|
동적계획법(Dynamic programming)-3 (0) | 2018.01.15 |
동적계획법(Dynamic programming)-1 (0) | 2018.01.12 |
최단경로(shortest path problem)-3 (0) | 2018.01.11 |
최단경로(shortest path problem)-2 (0) | 2018.01.10 |