Programowanie dynamiczne: Różnice pomiędzy wersjami
[wersja przejrzana] | [wersja przejrzana] |
Usunięta treść Dodana treść
m robot dodaje: ml:ഡൈനാമിക് പ്രോഗ്രാമിങ് |
|||
Linia 1:
'''Programowanie dynamiczne''' jest techniką lub strategią projektowania [[algorytm
Programowanie dynamiczne opiera się na podziale rozwiązywanego problemu na podproblemy względem kilku parametrów. W odróżnieniu od techniki [[dziel i zwyciężaj]] podproblemy w programowaniu dynamicznym nie są na ogół rozłączne, ale musi je cechować [[własność optymalnej podstruktury]]. Zagadnienia odpowiednie dla programowania dynamicznego cechuje również to, że zastosowanie do nich [[Atak brute force|metody siłowej]] (ang. ''brute force'') prowadzi do ponadwielomianowej liczby rozwiązań podproblemów, podczas gdy sama liczba różnych podproblemów jest wielomianowa.
Zazwyczaj jednym z parametrów definiujących podproblemy jest liczba elementów znajdujących się w rozpatrywanym problemie, drugim jest pewna wartość liczbowa, zmieniająca się w zakresie od 0 do największej stałej występującej w problemie. Możliwe są jednak bardziej skomplikowane dobory parametrów, a także większa ich liczba. Ponieważ jednak uzyskiwany algorytm zazwyczaj wymaga pamięci (i czasu) proporcjonalnego do iloczynu maksymalnych wartości wszystkich parametrów, stosowanie większej ilości parametrów niż 3-4 rzadko bywa praktyczne.
Klucz do zaprojektowania algorytmu tą techniką leży w znalezieniu [[
Niejednokrotnie stosowanie techniki programowania dynamicznego daje w rezultacie [[algorytm pseudowielomianowy]]. Programowanie dynamiczne jest jedną z bardziej skutecznych technik rozwiązywania [[Problem NP
Programowanie dynamiczne może być również wykorzystywane jako alternatywna metoda rozwiązywania problemów zaliczanych do klasy [[problem P|P]], o ile złożoność algorytmu wielomianowego nie jest satysfakcjonująca, a w praktyce, nawet dla dużych instancji problemu, wartości liczbowe występujące w problemie są niewielkie.
== Przykłady zastosowań ==
Algorytmy programowania dynamicznego są stosowane między innymi w informatyce, matematyce, bioinformatyce, ekonomii, i logistyce. Oto niektóre przykłady zastosowań programowania dynamicznego:
Linia 20 ⟶ 19:
* algorytmy rozwiązujące [[Problem plecakowy|zagadnienie plecakowe]]
* [[Algorytm Earleya]]
* znajdowanie rozwiązania [[Problem nawiasowania ciągu macierzy|problemu optymalnego nawiasowania macierzy]]
* [[Algorytm Floyda-Warshalla]]
* obliczanie [[Odległość Levenshteina|odległości Levenshteina]]
|