Dynamisk programmering, när man hänvisar till området datavetenskap, beskriver en grupp liknande datoralgoritmer som är avsedda att lösa komplexa problem genom att bryta ner problemet i uppsättningar av mindre problem. Först skapad av Richard Bellman på 1950-talet, arbetar dynamisk programmering med problem som antingen är överlappande delproblem eller optimala understrukturer. För att förstå hur dynamisk programmering fungerar är det bäst att förstå konceptet bakom dessa två termer.
Överlappande delproblem beskriver komplicerade ekvationer som, när de bryts ner i mindre uppsättningar av ekvationer, återanvänder delar av de mindre ekvationerna mer än en gång för att nå ett svar. Till exempel kan en matematisk ekvation som uppmanas att beräkna alla möjliga resultat med hjälp av en uppsättning siffror beräkna samma resultat flera gånger medan andra resultat bara beräknas en gång. Dynamisk programmering skulle berätta för det här problemet att efter att ha beräknat resultatet första gången bör det spara det resultatet och koppla in svaret i ekvationen senare istället för att beräkna det igen. När man hanterar långa komplexa processer och ekvationer sparar detta tid och skapar en snabbare lösning med mycket färre steg.
Optimala understrukturer skapar en lösning genom att hitta det bästa svaret på alla delproblem och sedan skapa det bästa helhetssvaret. Efter att ha delat upp ett komplext problem i mindre problem använder datorn sedan ett matematiskt system för att avgöra vad det bästa svaret för varje problem är. Den beräknar svaret på det ursprungliga problemet från de mindre svaren. Det finns brister med denna process. Även om det ger den lösning som fungerar bäst matematiskt, kan det vara eller inte vara den bästa lösningen i det verkliga livet, beroende på typen av problem och hur det relaterar till den verkliga världen.
Under någon av dessa operationer försöker den dynamiska programmeringsalgoritmen hitta den kortaste vägen till lösningen. Det kan ta ett av två tillvägagångssätt för att göra detta. Top-down-metoden bryter ner ekvationen i mindre ekvationer och återanvänder svaren för dessa ekvationer när det behövs. Bottom-up-metoden försöker lösa det minsta matematiska värdet efter att ha brutit ner ekvationen och sedan arbetar sig uppåt mot det största därifrån. Båda tillvägagångssätten sparar tid, men dynamisk programmering fungerar bara när det ursprungliga problemet kan delas upp i mindre ekvationer som någon gång återanvänds för att lösa ekvationen.