R1NQFAQDH3EG9

I_R_W14_M35_C++ Programowanie dynamiczne - znajdowanie spójnego podciągu

Źródło: Gerd Altman, from Pixabay, domena publiczna.

Programowanie dynamiczne a technika dziel i zwyciężaj

Poznaliśmy już technikę dziel i zwyciężaj. Ten e‑materiał poświęcony jest programowaniu dynamicznemu, ma z nią pewne cechy wspólne, ale można też wskazać kilka różnic.

Podobieństwa:

  • Obie metody polegają na rozkładaniu większego problemu na mniejsze części, co ułatwia jego rozwiązanie.

  • Zarówno programowanie dynamiczne, jak i technika dziel i zwyciężaj często wykorzystują rekurencję do rozwiązania podproblemów.

  • Obydwie techniki są stosowane do rozwiązywania złożonych problemów, które są trudne lub niemożliwe do rozwiązania przy użyciu prostych podejść iteracyjnych.

  • Są powszechnie stosowane w algorytmice i znalazły szerokie zastosowanie w różnych dziedzinach, od optymalizacjiproblem optymalizacyjnyoptymalizacji po przetwarzanie danych.

Różnice:

  • Programowanie dynamiczne polega na rozkładaniu problemu na mniejsze podproblemy, rozwiązywaniu ich, a następnie wykorzystywaniu tych rozwiązań do rozwiązania większego problemu. Kluczowe jest tu zapamiętywanie rozwiązań podproblemów, aby uniknąć ich ponownego rozwiązywania.
    Metoda dziel i zwyciężaj polega na dzieleniu problemu na mniejsze, niezależne części, rozwiązywaniu ich oddzielnie, a następnie łączeniu wyników do uzyskania końcowego rozwiązania. Każda część jest rozwiązywana od nowa, bez wykorzystania wyników innych części.

  • Programowanie dynamiczne wymaga przechowywania wyników rozwiązanych podproblemów.
    Metoda dziel i zwyciężaj nie wymaga zazwyczaj przechowywania wyników podproblemów, ponieważ każdy podproblem jest rozwiązywany niezależnie.

  • Programowanie dynamiczne jest używane głównie w problemach optymalizacyjnych, gdzie istnieje wiele możliwych rozwiązań, a celem jest znalezienie najlepszego z nich.
    Metoda dziel i zwyciężaj jest stosowana w problemach, które naturalnie dzielą się na mniejsze części, takich jak sortowanie lub wyszukiwanie.

  • Programowanie dynamiczne jest efektywne, gdy te same podproblemy powtarzają się wielokrotnie.
    Metoda dziel i zwyciężaj jest najskuteczniejsza, gdy podproblemy są unikalne i nie powtarzają się.

Słownik

memoryzacja
memoryzacja

zapamiętywanie wyników mniejszych podproblemów, aby później móc z nich skorzystać przy dalszych etapach rozwiązywania większych podproblemów

problem optymalizacyjny
problem optymalizacyjny

problem obliczeniowy, którego rozwiązanie polega na znalezieniu największej lub najmniejszej wartości pewnego parametru tego problemu, spełniającej określoną własność