다이나믹 프로그래밍은 메모리를 적절히 사용하여 수행 시간 효율성을 비약적으로 향상시키는 방법이다.
-이미계산된 결과(작은문제)는 별도의 메모리 영역에 저장하여 다시 계산하지 않도록 한다.
-다이나믹 프로그래밍의 구현은 일반적으로 두 가지 방식(탑다운/보텀업)으로 구성된다.
다이나믹 프로그래밍은 동적 계획법이라고도 부른다.
일반적인 프로그래밍에서 동적이란) 프로그램이 실행되는 도중에 이지만 다이나믹프로그래밍에서의 '다이나믹'은 별다른 의미 없이 사용 된 단어.
다이나믹 프로그래밍은 다음의 조건이 만족할 때 사용한다
피보나치 수열 코드 예시)
x==1 or x==2 로 종료조건 설정 하면 값 을 구할수 있다.
하지만 이렇게 한다면 숫자가 커질수록 중복되는 숫자가 급격하게 많아진다. 피보나치 수열을 확인해보면 다이나믹 프로그래밍의 사용 조건 1,2 번을 만족하는것을 알수있는데. 다이나믹 프로그래밍을 이용항여 시간 복잡도를 최적화 시켜야한다.
큰문제 ( 탑) 를 해결하기 위해 작은문제(다운)를 재귀적으로 호출하여 큰문제를 해결
탑 다운 코드 예시)
보텀 업 코드 예시)
보텀업은 작은문제들로 큰 문제를 해결 할 수 있으므로 작은문제들을 반복적으로 수행하여 큰 문제를 해결 한다. 이를 위한 초기 값을 설정