Kas yra dinaminis programavimas?

Dinaminis programavimas, kai kalbama apie kompiuterių mokslo sritį, apibūdina panašių kompiuterinių algoritmų grupę, skirtą sudėtingoms problemoms išspręsti, suskaidant problemą į mažesnių problemų rinkinius. Pirmą kartą šeštajame dešimtmetyje sukurtas Richardas Bellmanas, dinaminis programavimas veikia su problemomis, kurios yra persidengiančios subproblemos arba optimalios postruktūros. Norint suprasti, kaip veikia dinaminis programavimas, geriausia suprasti šių dviejų terminų sąvoką.

Sutampančios antrinės problemos apibūdina sudėtingas lygtis, kurios, suskaidytos į mažesnes lygčių rinkinius, daugiau nei vieną kartą panaudoja mažesnių lygčių dalis, kad gautų atsakymą. Pavyzdžiui, matematinė lygtis, kurioje nurodoma apskaičiuoti visus galimus rezultatus naudojant skaičių rinkinį, tą patį rezultatą gali apskaičiuoti daug kartų, o kitus rezultatus skaičiuojant tik vieną kartą. Dinaminis programavimas nurodytų šią problemą, kad pirmą kartą apskaičiavęs rezultatą, jis turėtų išsaugoti tą rezultatą ir vėliau įtraukti atsakymą į lygtį, o ne skaičiuoti iš naujo. Atliekant ilgus sudėtingus procesus ir lygtis, tai taupo laiką ir sukuria greitesnį sprendimą, naudojant daug mažiau veiksmų.

Optimalios postruktūros sukuria sprendimą surasdamos geriausią atsakymą į visas poproblemas ir sukurdamos geriausią bendrą atsakymą. Suskaidęs sudėtingą problemą į smulkesnes, kompiuteris naudoja matematinę sistemą, kad nustatytų, koks yra geriausias kiekvienos problemos atsakymas. Jis apskaičiuoja pradinės problemos atsakymą iš mažesnių atsakymų. Šiame procese yra trūkumų. Nors jis pateikia matematiškai geriausiai veikiantį sprendimą, jis gali būti geriausias sprendimas realiame gyvenime, atsižvelgiant į problemos tipą ir jo ryšį su realiu pasauliu.

Bet kurios iš šių operacijų metu dinaminio programavimo algoritmas bando rasti trumpiausią kelią iki sprendimo. Tai galima padaryti vienu iš dviejų būdų. „Iš viršaus į apačią“ metodas suskaido lygtį į mažesnes lygtis ir prireikus pakartotinai panaudoja šių lygčių atsakymus. „Iš apačios į viršų“ metodas bando išspręsti mažiausią matematinę reikšmę, suskaidžius lygtį, ir tada juda aukštyn link didžiausios. Abu metodai taupo laiką, tačiau dinaminis programavimas veikia tik tada, kai pradinė problema gali suskaidyti į mažesnes lygtis, kurios tam tikru momentu vėl panaudojamos lygčiai išspręsti.