동적 프로그래밍에 대해 읽었으며 매우 익숙했습니다. 동적 프로그래밍을 "반복적"및 "재귀 적"방식으로 적용 할 수 있는지 또는 그 중 하나만을 적용하는 것이 우수 사례인지 알고 싶습니다. 좋은 예제/링크가 도움이 될 것입니다.동적 프로그래밍 재귀 또는 반복
답변
예, DP를 둘 다 적용 할 수 있습니다.
여기에서 시작: 그럼 당신은 연습 문제 (이 문제의 각도 Editorial 아이디어를 설명해야 TopCoder.com 당신은 링크를 찾을 수 있습니다, Dynamic Programming: From novice to advanced 첫 번째 튜토리얼
A Tutorial on Dynamic Programming이 http://en.wikipedia.org/wiki/Dynamic_programming
용액 뒤에.
동적 프로그래밍 역방향 구현 재귀 솔루션 (대부분의 경우)을 알 수있다.
N 구두로, 재귀에서 n=0
(또는 다른 값)에 대한 일부 중지 조건이있는 x(n+1) = f(x(n))
을 계산합니다.
많은 경우에 기능 f
은 일부 최소/최대 기능이지만 반드시 그럴 필요는 없습니다. 또한이 함수는 단일 변수를 사용할 필요가 없습니다.
동적 프로그래밍은 하나 개 이상의 변수가 다음, f(1)
후, f(2)
등
을 f(0)
를 계산함으로써이 문제를 해결하는 것이고, 일반적으로 함수를 계산하기 위해 몇몇 천연있을 것이다.
동적 프로그래밍으로 해결할 수있는 예 : 3 개의 골프 클럽이 제공됩니다. 각 골프 클럽은 거리 x 단위의 골프 공을 보낼 수 있습니다 (예 : 24, 37 및 54 단위). 문제는 정확히 200 유닛 떨어져있는 구멍에 충돌 할 수 있습니까? 가능한 경우 최소 촬영 횟수는 얼마입니까? n이 0 인 경우 기능 shot(n)
반환, 몇 가지 큰 수는 n이 0보다 작은 경우 0이 사소한 구현을 허용 할
shots(200) = min(shots(200-24),shots(200-37),shots(200-54))
, 및 표현 :
재귀 솔루션은 다음과 같을 것 그렇지 않으면 위에.
그러나 n의 값이 크면 위 식의 다른 분기에서 동일한 값을 반복해서 지정해야합니다. 이 경우 0에서 시작하여 shots(0)
, shots(1)
, shots(2)
등을 계산하는 것이 좋습니다. 지수 시간 대신 선형 시간 및 상수 공간을 사용하여이 문제에 대한 "동적 프로그래밍"솔루션이 될 것입니다 (3 방향 트리를 가로 지르는 것).) 및 선형 공간 (호출 스택의 경우)이 있습니다.
- 1. 재귀, 꼬리 재귀 및 반복
- 2. 동적 프로그래밍 재귀 및 Memoization의 뿌림
- 3. 재귀 대 반복 알고리즘
- 4. JSF/Seam - 중첩/재귀 반복
- 5. 이 재귀 또는 반복입니까?
- 6. for 루프가있는 재귀 함수를 반복 함수로 변경 하시겠습니까?
- 7. 동적 프로그래밍
- 8. C++ 프로그래밍 - 반복 증가 계산
- 9. 반복 그룹 또는 아니요
- 10. 반복 및 반복
- 11. Ocaml - 반복 반복
- 12. 동적 언어로 보안 프로그래밍
- 13. 병렬 동적 프로그래밍
- 14. 동적 웹 프로그래밍
- 15. 동적 프로그래밍 솔루션을 찾고
- 16. 동적 프로그래밍 단계 추적하기
- 17. 동적 프로그래밍 문제
- 18. 동적 프로그래밍 ArrayIndexOutOfBoundException
- 19. WCF를 이용한 동적 프로그래밍
- 20. 변환 루프 ... 재귀 재귀
- 21. 재귀 또는 오류 검사 뮤텍스?
- 22. 동적 프로그래밍 또는 욕심 많은 방법을 사용하는 문제에 대한 해결책?
- 23. WiX 반복 동적 구성 가능 빌드?
- 24. 재귀 적 방법의 프로그래밍 구조에 관한 질문
- 25. Android : 프로그래밍 방식으로 리소스 ID 반복
- 26. 프로그래밍 방식으로 jQuery 도구 오버레이 반복
- 27. 스칼라에서 반복 매개 변수를 프로그래밍 방식으로 설정
- 28. 프로그래밍 방식으로 TFS에 새 반복 추가
- 29. 이 반복 또는 Jquery 반복 함수 setInterval 함수를 사용해야합니까?
- 30. 재귀 트리,
메모를 입력하면 하향식 접근 방식은 여전히 동적 프로그래밍으로 간주됩니다. 상향식 DP와 하향식 DP는 모두 DP입니다. – harold
@harold 맞아요, 아마도 memoization에 대해 뭔가를 추가해야했습니다 (메모리 요구 사항을 합리적으로 유지하려면 사용하기가 조금 더 어려워서, 값을 잊어 버릴 때를 알아야합니다) 반면 상향식 그것은 꽤 분명하다). –
캐싱을 사용하는 재귀 솔루션은 숫자 0..200의 작은 하위 집합 만보고 있지만 반복 솔루션은 모든 것을 조사해야합니다 (적어도 피할 수는 없습니다). 따라서 재귀 적 솔루션은이 경우 더 빠르게 실행될 것으로 보입니다. – AlwaysLearning