Wielokrotnie korzystałem z techniki programowania dynamicznego, ale dzisiaj mój przyjaciel zapytał mnie, jak zabrać się do definiowania moich pod-problemów, zdałem sobie sprawę, że nie mam możliwości udzielenia obiektywnej formalnej odpowiedzi. Jak formalnie zdefiniować pod-problem dotyczący problemu, który rozwiązalibyście za pomocą programowania dynamicznego?
algorithms
dynamic-programming
jozefg
źródło
źródło
Odpowiedzi:
Zasadą programowania dynamicznego jest myślenie z góry na dół (tzn. Rekurencyjnie), ale rozwiązywanie z dołu do góry. Tak więc dobrą strategią projektowania DP jest rekurencyjne formułowanie problemu i generowanie w ten sposób podproblemów.
źródło
Jak zauważył @Suresh, kiedy już wiesz, że twój problem może zostać rozwiązany przez DP (tj. Wykazuje optymalną podbudowę i nakładające się na siebie podproblemy), możesz pomyśleć o podzieleniu i pokonaniu rekurencyjnego rozwiązania.
Oczywiście dzielenie i podbijanie będzie wysoce nieefektywne, ponieważ każdy podproblem napotkany w powiązanym drzewie rekurencyjnym zostanie rozwiązany ponownie, nawet jeśli został już znaleziony i rozwiązany. Tutaj różni się DP: za każdym razem, gdy napotkasz podproblem, rozwiążesz go i zapiszesz w tabeli. Później, gdy ponownie spotkasz się z tym podproblemem, uzyskasz dostęp w czasie jego rozwiązania, zamiast go rozwiązać ponownie. Ponieważ liczba nakładających się podproblemów jest zwykle ograniczona wielomianem, a czas wymagany do rozwiązania jednego podproblemu jest również wielomianowy (w przeciwnym razie DP nie może zapewnić opłacalnego rozwiązania), można uzyskać rozwiązanie wielomianowe.
Dlatego zastanowienie się nad rozwiązaniem typu „dziel i zwyciężaj” zapewni ci wgląd w to, jakie może być podproblemem dla twojego konkretnego problemu.
źródło
Moje doświadczenie polega na znalezieniu sposobu na „zmniejszenie zbędnego wyliczania za pomocą przechowywania użytecznej wartości już wyliczonej”. Nawiasem mówiąc, Programowanie dynamiczne jest bardzo popularne w ICPC (International Collegiate Programming Contest). Każdy może mieć własne zdanie na temat DP po przećwiczeniu kilku problemów ICPC.
źródło