하향식 동적 프로그래밍과 상향식 동적 프로그래밍간에 근본적인 차이가 있습니까?
특히 상향식으로 해결할 수 있지만 하향식으로 해결할 수없는 문제가 있습니까? 또는 상향식 접근 방식이 하향식 접근 방식에서 되풀이되는 것입니까?
하향식 동적 프로그래밍과 상향식 동적 프로그래밍간에 근본적인 차이가 있습니까?
특히 상향식으로 해결할 수 있지만 하향식으로 해결할 수없는 문제가 있습니까? 또는 상향식 접근 방식이 하향식 접근 방식에서 되풀이되는 것입니까?
답변:
상향식 방법을 사용하려면 "하단"이 무엇인지 효율적으로 결정할 수 있어야합니다. 이는 일반적으로 제한이 큰 문제 공간이 필요하다는 것을 의미합니다. 가장 낮은 수준의 계산이 무엇인지 알고 종속성 순서가 위로 올라가는 것을 알면 올바른 순서로 반복적으로 계산하고 결과를 저장하는 것이 좋습니다. 분할에 대한 계승, 순진한 피보나치 및 오일러 재발 관계는이 접근법에 적합한 문제의 좋은 예입니다.
일부 문제는 계산에 대한 하위 또는 종속 순서를 쉽게 결정하지 못합니다. 예를 들어, 체스 위치 평가는 위치별로 유용하게 메모되며 평가 점수가 저장되므로 다시 계산할 필요가 없습니다. 이동 전치 및 반복으로 인해 검색 트리의 여러 레벨에서 위치가 반복 될 수 있으므로 평가 결과를 저장하는 것이 좋습니다. 그러나 재귀 적으로 내림차순으로 (및 중간 가지 치기를 고려하지 않고) 트리의 가장 낮은 수준에서 위치가 어떻게 될지 알 수있는 방법이 없으므로 하향식이 실제로 유일하게 가능한 접근법입니다.
하향식 접근 방식 : 이것은 문제의 재귀 적 구성에서 직접 빠지는 것입니다. 하위 문제에 대한 솔루션을 사용하여 문제에 대한 솔루션을 재귀 적으로 공식화 할 수 있고 하위 문제가 겹치는 경우 하위 문제에 대한 솔루션을 쉽게 메모하거나 테이블에 저장할 수 있습니다. 새로운 하위 문제를 해결하려고 할 때마다 먼저 테이블이 이미 해결되었는지 확인합니다. 솔루션이 기록 된 경우 직접 사용할 수 있으며 그렇지 않은 경우 하위 문제를 해결하고 해당 솔루션을 테이블에 추가합니다.
상향식 접근 방식 : 하위 문제와 관련하여 재귀 적으로 문제에 대한 솔루션을 공식화하면 상향식으로 문제를 재구성 할 수 있습니다. 하위 문제를 먼저 해결하고 해당 솔루션을 사용하여 빌드 더 큰 하위 문제에 대한 해결책에 도달합니다. 또한 일반적으로 작은 하위 문제에 대한 솔루션을 사용하여 더 큰 하위 문제에 대한 솔루션을 반복적으로 생성하여 표 형식으로 수행됩니다. 예를 들어, F41과 F40의 값을 이미 알고 있다면 F42의 값을 직접 계산할 수 있습니다.