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
- lambda
- DFS
- 자바
- 스프링
- kotlin
- 운영체제
- 자료구조
- 그래프
- 백준
- 네트워크
- backtracking
- 모던자바
- Brute-force
- 프로그래머스
- OS
- Spring
- algorithm
- LEVEL2
- 코틀린
- TDD
- back-end
- DP
- BFS
- baekjoon
- Java8
- java
- 프로젝트
- 백트래킹
- 알고리즘
- programmers
Archives
- Today
- Total
요깨비's LAB
[DP] 다이나믹 프로그래밍이란? 본문
1. 개념
"하나의 문제는 한번만 풀도록 하는 알고리즘" - 핵심
다이나믹 프로그래밍은 문제의 답이 이용되는 구조를 이용한 알고리즘이다. 큰 문제를 작은 문제로 나눈다는 측면에서 분할정복(divide and conquer)알고리즘과 비슷하지만 다음과 같은 차이점이 존재한다.
DAC | DP |
문제가 절반으로 줄어듬 | 문자게 -1로 줄어듬 |
Function problem | 최적화 문제 |
결과가 한번 사용 | 결과가 여러번 사용됨 |
분할이 성능 향상 | 결과 재사용이 성능 향상 |
다이나믹 프로그래밍 알고리즘을 적용하기 위해서는 두가지 조건을 만족해야 한다.- 큰 문제를 작은 문제로 쪼갤 수 있으며, 작은 문제도 큰
- 문제와 같은 방법으로 풀 수 있고, 작은 문제들이 겹치는지?
(Overlapping SubProblem)
문제를 작은 문제로 나누어 풀 수 있어야 하며, 큰 문제와 작은 문제를 같은 방법으로 풀 수 있어야 한다. - 문제의 정답을 작은 문제의 정답으로부터 구할 수 있으며, 문제의 크기에 상관없이 어떤 한 문제의 정답은 일정하다.
(Optimal Substructure)
2. 알고리즘 기법
- Top-Down (Recursive)
1. 문제를 작은 문제로 나눈다.
2. 작은 문제들을 푼다.
3. 작은 문제들의 답으로 전체 문제를 푼다. - Bottom-Up (주로 반복문)
1. 가장 작은 문제부터 푼다.
2. 문제의 크기를 점점 크게 만들어서 전체문제를 푼다.
3. 점화식
- 점화식 : 인접한 항들 사이의 관계식
4. Tip.
큰 문제가 주어지면 작은 문제부터 확인하자. cache[0],cache[1],cache[2].. 순서대로 해결하다보면 규칙이 보일 것이다.
하지만 그 규칙을 제대로 구현하는 것은 나의 실력 문제니... 열심히 하겠습니다.
'알고리즘(Java) > DP' 카테고리의 다른 글
[백준, DP, JAVA] P.1753 최단 경로 (0) | 2020.09.22 |
---|---|
[백준, DP, JAVA] P.2299 조짜기 (0) | 2020.02.15 |
[백준, DP, JAVA] P.11052 카드 구매하기 (0) | 2019.11.26 |
Comments