동적 프로그래밍과 관련된 시각화를 보고 싶다면 이 방법을 시도해 보십시오. 동적 프로그래밍(일반적으로 DP라고 함)은 특정 한 종류의 문제를 해결하는 매우 강력한 기술입니다. 그것은 접근 방식과 간단한 사고의 매우 우아한 공식을 요구하고 코딩 부분은 매우 쉽습니다. 아이디어는 매우 간단합니다, 당신은 주어진 입력에 문제를 해결 한 경우, 다음 다시 같은 문제를 해결하지 않도록, 미래의 참조에 대한 결과를 저장합니다.. 곧 `과거를 기억하십시오`:) . 주어진 문제가 작은 하위 문제로 나눌 수 있고 이러한 작은 하위 문제가 차례로 여전히 작은 문제로 나뉘어진 경우이 과정에서 일부 오버 랩핑 하위 문제를 관찰하면 DP에 대한 큰 힌트입니다. 또한 하위 문제에 대한 최적의 솔루션은 주어진 문제의 최적 솔루션에 기여합니다(최적 하위 구조 속성이라고 함). 동적 프로그래밍 솔루션은 함수 방정식 재귀 문제를 해결하는 것으로 구성됩니다. 즉, 코어 (주) 문제로 시작한 다음 하위 문제로 나누고 이러한 하위 문제를 유사하게 해결합니다. 이 접근 방식에서 동일한 하위 문제가 여러 번 발생하고 더 많은 CPU 주기를 소비할 수 있으므로 시간 복잡성이 증가합니다. 동적 프로그래밍에서 동일한 하위 문제는 여러 번 해결되지 않지만 이전 결과는 솔루션을 최적화하는 데 사용됩니다. 예.

fibonacci 시리즈에서 :- 동적 프로그래밍을 적용하기 위해 문제가 있어야 하는 두 가지 주요 특성이 있습니다: 최적의 하위 구조와 중첩하위 문제. 중복되지 않는 하위 문제에 최적의 솔루션을 결합하여 문제를 해결할 수 있는 경우 전략을 “분할 및 정복”이라고 합니다. [1] 병합 정렬 및 빠른 정렬이 동적 프로그래밍 문제로 분류되지 않는 이유입니다. 종이에 “1+1+1+1+1+1+1+1+1=”을 적는다. “그게 뭐야?” “여덟 개” 세다! 왼쪽에 또 다른 “1+”를 기록합니다. “어때?” “나인!” “아홉 명이 이렇게 빠르다고 어떻게 알수 있었나요?” “방금 한 번 더 추가했습니다!” “그래서 여덟 명이 있었다는 것을 기억했기 때문에 다시 이야기할 필요가 없었습니다! 동적 프로그래밍은 나중에 시간을 절약하기 위해 물건을 기억하는 말을 그냥 멋진 방법입니다!” 유전학에서 서열 정렬은 동적 프로그래밍이 필수적인 중요한 응용 프로그램입니다. [11] 일반적으로 문제는 요소를 바꾸거나 삽입하거나 제거하는 편집 작업을 사용하여 한 시퀀스를 다른 시퀀스로 변환하는 것으로 구성됩니다. 각 작업에는 관련 비용이 있으며 목표는 가장 낮은 총 비용으로 편집 순서를 찾는 것입니다.

참고: 동적 프로그래밍을 사용하여 n번째 피보나치 번호를 찾기 위해 여기에 설명된 메서드는 O(n) 시간에 실행됩니다. N이 1018 (F (n)만큼 커질 때 F (n)를 찾는 더 나은 방법이 여전히 있으며, 우리가 원하는 것은 주어진 MOD에 대해 F (N)%MOD를 찾는 것입니다. 일부 프로그래밍 언어는 이름별 호출 평가 속도를 높이기 위해 특정 인수 집합을 사용하여 함수 호출의 결과를 자동으로 기억할 수 있습니다(이 메커니즘은 호출별 필요라고 함). 일부 언어는 이식 가능한 언어(예: 체계, 공통 리스프, 펄 또는 D)를 가능하게 합니다. 일부 언어에는 M. 부사로 의한 메모를 지원하는 표가 있는 프롤로그 및 J와 같은 자동 메모가 내장되어 있습니다. [4] 어떤 경우에도 참조적으로 투명한 함수에 대해서만 가능합니다.