Dynamisk programmering er en metode som brukes i datavitenskap for å løse komplekse problemer ved å bryte dem ned i enklere underproblemer. Det er spesielt effektivt for optimaliseringsproblemer og problemer med overlappende underproblemer og optimal understruktur. Implementering dynamisk programmering innebærer å velge passende teknikker, utføre beregninger effektivt og forstå felles brukstilfeller.

Teknikker i dynamisk programmering

Det er to hovedtilnærminger til dynamisk programmering: topp ned og bunn. Den øverste tilnærmingen bruker memoisering for å lagre resultater av underproblemer under recitering, unngå overflødige beregninger. Bunn-up tilnærmingen bygger løsninger iterativt fra de minste underproblemene, fylle en tabell for å nå det endelige svaret.

Beregninger og implementering

Implementeringsdynamikk programmering krever å definere tilstanden, som representerer et underproblem, og overgangen, som beskriver hvordan man beregner løsningen for en tilstand fra tidligere tilstander. Typisk brukes en tabell eller tabell til å lagre mellomliggende resultater. Korrekt initialisering og grensebetingelser er avgjørende for riktige beregninger.

Vanlige brukstilfeller

  • Korteste banealgoritmer, som Dijkstras og Floyd-Warshall
  • Knapsack problemvariasjoner
  • Sekvensjustering i bioinformatikk
  • Optimal binær søk trær
  • Myntendringsproblem