dp 예제

특히, fib(2)는 처음부터 세 번 계산하였다. 더 큰 예에서는 fib 또는 하위 문제의 더 많은 값이 다시 계산되어 지수 시간 알고리즘으로 이어집니다. 이 방정식의 첫 번째 줄은 가장 낮은 바운드에서 1에 인덱싱된 제곱으로 모델링된 보드와 가장 높은 바운드의 n을 다룹니다. 두 번째 줄은 마지막 순위에서 일어나는 일을 지정합니다. 기본 케이스를 제공합니다. 세 번째 줄인 재귀는 중요한 부분입니다. 예제에서 A, B, C, D 용어를 나타냅니다. 이 정의에서 우리는 q (i, j)에 대한 간단한 재귀 코드를 파생 시킬 수 있습니다. 다음 의사 코드에서 n은 보드의 크기, c (i, j)는 비용 함수이고 min()은 값 의 수의 최소값을 반환합니다: 예를 살펴보겠습니다: 80, 40, 30.3.let의 단어에 대한 최상의 유분 결과를 처리해 보겠습니다. 인덱스가 더 크거나 I와 같을 수 있습니다.

이 텍스트에는 재귀 및 동적 프로그래밍을 통해 까다로운 문제를 효율적으로 해결하는 방법을 보여주는 자세한 예제가 포함되어 있습니다. 결과를 0에서 필요한 개수까지 순차적으로 계산하면(위의 예에서) 문제 발생 전에 항상 하위 문제를 계산합니다. 또한 이 순서대로 수행하면 20개 이상의 값을 유지할 필요가 없습니다. 그래서 우리는 기존의 fibonacci 트릭을 사용할 수 있습니다 : 최적의 하위 구조는 하위 문제에 대한 최적의 솔루션의 조합에 의해 주어진 최적화 문제에 대한 솔루션을 얻을 수 있음을 의미합니다. 이러한 최적 하부 구조는 일반적으로 재귀에 의해 설명된다. 예를 들어 그래프 G=(V,E)가 주어지면 정점v에 이르는 최단 경로 p는 최적의 하부 구조를 나타낸다: 이 가장 짧은 패스 p에 있는 중간 정점 w를 취합니다. p가 진정으로 가장 짧은 경로인 경우 w에서 w로 w및 p2로 하위 경로 p1로 분할 할 수 있습니다. 따라서 벨만 포드 알고리즘 또는 플로이드-워샬 알고리즘이 수행하는 재귀 방식으로 최단 경로를 찾기 위한 솔루션을 쉽게 공식화할 수 있습니다. k {displaystyle k}를 k {displaystyle k} th 층에서 떨어뜨릴 때 계란이 끊어지도록 하는 총 바닥 수로 보자 (위의 예는 k = 37 {displaystyle k=37} 를 취하는 것과 같습니다). 예를 들어 행렬 A, B 및 C를 곱해 보겠습니다.

치수가 각각 m×n, n×p 및 p×s라고 가정해 보겠습니다. 매트릭스 A × B × C는 크기 m × s의 것이며 아래 표시된 두 가지 방법으로 계산 할 수 있습니다 : 좋은 예는 아니지만 내 요점을 얻었으면합니다. Top Down에서는 작은 솔루션에서 구축하는 방법을 설명하여 바로 큰 솔루션을 빌드하기 시작합니다. 아래에서 위로, 당신은 작은 솔루션으로 시작하고 구축. 이 전략은 두 와인이 같은 비용을 때 무엇을 언급하지 않지만, 이 전략은 바로 느낀다. 그러나 불행히도 다음 예제에서 볼 수 있듯이 그렇지 않습니다. 예를 들어, 와인의 가격이 선반에 배치될 때(왼쪽에서 오른쪽으로 순서대로): p1=1, p2=4, p3=2, p4=3. 최적의 해결책은 총 이익 1 * 1 + 3 * 2 + 3 + 4 * 4 = 29의 주문 p1, p4, p3, p2로 와인을 판매하는 것입니다.

이 함수는 실제 경로가 아닌 경로 비용만 계산합니다. 아래의 실제 경로에 대해 설명합니다. 이것은 Fibonacci 숫자 예제와 마찬가지로 겹치는 하위 문제 특성을 나타내기 때문에 끔찍하게 느립니다. 즉, 동일한 경로 비용을 반복해서 다시 계산합니다. 그러나 함수를 사용하는 대신 경로 비용을 2차원 배열 q[i, j]에 저장하면 상향식으로 훨씬 빠르게 계산할 수 있습니다. 이렇게 하면 다시 계산할 수 없습니다. 배열 q[i, j]에 필요한 모든 값은 한 번만 미리 계산됩니다.