Dynaaminen ohjelmointi on menetelmä, jota käytetään tietokonetieteessä monimutkaisten ongelmien ratkaisemiseksi jakamalla ne yksinkertaisempiin alaongelmiin. Se on erityisen tehokas optimoimaan ongelmia ja ongelmia päällekkäisten alaongelmien ja optimaalisen alarakenteen kanssa. Dynaaminen ohjelmointi edellyttää sopivien tekniikoiden valintaa, laskelmien tehokasta suorittamista ja yhteisten käyttötapausten ymmärtämistä.

Dynaamisen ohjelmoinnin tekniikat

Dynaamiseen ohjelmointiin on kaksi päälähestymistapaa: ylhäältä alas- ja alhaalta ylös-lähestymistapa käyttää memoisointia aliongelmien tulosten tallentamiseen rekursion aikana, välttäen tarpeettomia laskelmia. Alhaalta ylös -lähestymistapa rakentaa ratkaisuja iteratiivisesti pienimmistä aliongelmista, täyttäen taulukon lopullisen vastauksen saavuttamiseksi.

Laskelmat ja toteutus

Toteutus dynaaminen ohjelmointi edellyttää määritelmän tilaa, joka edustaa alaongelmaa, ja siirtymä, joka kuvaa, miten laskea ratkaisu valtion aiemmista valtioista. Tyypillisesti, taulukko tai matriisi käytetään tallentaa välituloksia. Oikea alustaminen ja rajaehdot ovat välttämättömiä oikeita laskelmia.

Yleiset käyttötapaukset

  • Lyhyet polkualgoritmit, kuten Dijkstra... ja Floyd-Warshall.
  • Knapsack-ongelman vaihtelut
  • Sekvenssien yhdenmukaistaminen bioinformaateissa
  • Optimaaliset binäärihakupuut
  • Rahanvaihto-ongelma