1. 동적계획법?
다이나믹 프로그래밍(dynamic programming)
‘하나의 문제는 단 1번만 풀도록 하는 알고리즘’
2개의 가정 하에 사용할 수 있다
1-1) 큰 문제를 작은 문제로 나눌 수 있다.
1-2) 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일하다.
크고 어려운 문제가 있으면 그것을 먼저 잘게 나누어서 해결한 뒤에 각각을 처리한 다음 나중에 전체의 답을 구하는 것
이 과정에서 이미 계산한 결과는 배열에 따로 저장한다음 나중에 동일한 계산을 할때 저장된 값을 단순히 호출하여 반환하기만 하면 된다
2. 피보나치 수열
피보나치 수열의 점화식은 an=an−1+an−2
특정한 위치의 숫자를 구하기 위해 바로 이전의 숫자와 두번 이전의 숫자의 합을 구함
초기값에 따라 전체 수열이 달라짐
예를 들어 a1=1,a2=1라고 한다면 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,... 와 같이 구해짐
만약 단순하게 피보나치 수열의 일반항을 구하기 위해서 a15를 구해본다고 가정해보면
a14와 a13을 알아야하고 a14를 알기 위해 a13과 a12를 알아야한다

이런 경우 단순히 계산한다면 이미 해결한 문제를 다시 반복적으로 해결하므로 상당히 비효율적
그림만 보더라도 a12를 3번이나 반복적으로 다시 계산해야한다는 점이 비효율적이다
a50만 하더라도 계산량이 2의 50제곱정도로 계산이 불가능할 정도
3. 참고
https://blog.naver.com/ndb796/221233570962
20. 다이나믹 프로그래밍(Dynamic Programming)
다이나믹 프로그래밍은 프로그래밍 대회를 준비하시는 분에게는 절대 피할 수 없는 숙명입니다. 다이나믹 ...
blog.naver.com
'알고리즘 > 다이나믹 프로그래밍' 카테고리의 다른 글
다이나믹 프로그래밍 정복기4 - 규칙을 찾으면 되는 쉬운문제들1- (0) | 2022.09.09 |
---|---|
다이나믹 프로그래밍 - Kadane algorithm (0) | 2022.09.04 |
다이나믹 프로그래밍 정복기 2 - 연습문제 1로 만들기 - (0) | 2022.09.03 |
다이나믹 프로그래밍 정복기1 - 기본이론 - (0) | 2022.09.01 |
다이나믹프로그래밍 - 어떻게하면 완전탐색도 더 효율적으로 할 수 있을까? (0) | 2022.06.23 |