Programowanie dynamiczne

by Jerry Sky

2020-04-08



Zarys

Programowanie dynamiczne jest kolejną metodologią budowy algorytmów pozwalająca na rozwiązywanie szerokiej gamy problemów (często tam gdzie D&C nie może być użyta) choć głównie jest stosowana do tzw. problemów optymalizacyjnych.
Niestety przez jej ogólność rozwiązania nie muszą mieć optymalnej złożoności obliczeniowej.

How does it work

Podobnie jak w D&C w programowaniu dynamicznym rozwiązujemy zadany problem dzieląc go na pod-problemy, a następnie łączymy je. Różnica natomiast polega na tym, że w metodologii D&C pod-problemy są niezależne, a w programowaniu dynamicznym pod-problemy mogą zależeć od siebie (wykorzystuje się to zapamiętując rozwiązania pod-problemów i wykorzystując je w innych miejscach).

Przykład #1

Problem: Znalezienie najkrótszej ścieżki w skierowanym grafie acyklicznym (DAG).

Przykład #2

Problem: Najdłuższy podciąg rosnący.

Przykład #3

Problem: Longest Common Subsequence (LCS).

Przykład #4

Problem: Edit-distance — znalezienie odpowiednio zdefiniowanej odległości pomiędzy dwoma ciągami. Jest to problem, który również można rozwiązać przy pomocy programowania dynamicznego w stosunkowo podobny sposób jak problem LCS.

More here (Chapter 6.3)

Summary

Kluczowa własność metodologii programowania dynamicznego: rozwiązując zadany problem jesteśmy w stanie zdefiniować:

More

Więcej na temat programowania dynamicznego: