Mis on dünaamiline programmeerimine?

Dünaamiline programmeerimine kirjeldab arvutiteaduse valdkonnale viidates sarnaste arvutialgoritmide rühma, mis on mõeldud keerukate probleemide lahendamiseks, jagades need väiksemateks probleemideks. Esmakordselt 1950. aastatel Richard Bellmani loodud dünaamiline programmeerimine töötab probleemidega, mis on kas kattuvad alamprobleemid või optimaalsed alamstruktuurid. Dünaamilise programmeerimise toimimise mõistmiseks on kõige parem mõista nende kahe termini kontseptsiooni.

Kattuvad alamprobleemid kirjeldavad keerulisi võrrandeid, mis väiksemateks võrrandikogumiteks jagamisel kasutavad vastuse saamiseks uuesti väiksemate võrrandite osi rohkem kui üks kord. Näiteks matemaatiline võrrand, mis kästakse arvutada kõikvõimalikud tulemused arvude komplekti kasutades, võib arvutada sama tulemuse mitu korda, samas kui muud tulemused arvutatakse ainult ühe korra. Dünaamiline programmeerimine ütleks sellele probleemile, et pärast tulemuse esmakordset arvutamist peaks see salvestama selle tulemuse ja ühendama vastuse hiljem võrrandisse, selle asemel et seda uuesti arvutada. Pikkade keeruliste protsesside ja võrranditega tegelemisel säästab see aega ja loob kiirema lahenduse, kasutades palju vähem samme.

Optimaalsed alamstruktuurid loovad lahenduse, leides kõikidele alamprobleemidele parima vastuse ja luues seejärel parima üldise vastuse. Pärast keerulise probleemi väiksemateks jagamist kasutab arvuti matemaatilist süsteemi, et teha kindlaks, milline on iga ülesande jaoks parim lahendus. See arvutab väiksemate vastuste põhjal algse ülesande vastuse. Sellel protsessil on puudusi. Kuigi see annab matemaatiliselt kõige paremini toimiva lahenduse, võib see olla või mitte olla parim lahendus päriselus, olenevalt probleemi tüübist ja sellest, kuidas see seostub reaalse maailmaga.

Kõigi nende toimingute ajal püüab dünaamilise programmeerimise algoritm leida lühima tee lahenduseni. Selleks võib kasutada ühte kahest lähenemisviisist. Ülalt-alla lähenemisviis jaotab võrrandi väiksemateks võrranditeks ja kasutab vajaduse korral nende võrrandite vastuseid uuesti. Alt-üles lähenemine püüab pärast võrrandi lagunemist lahendada väikseima matemaatilise väärtuse ja liigub sealt edasi suurima poole. Mõlemad lähenemisviisid säästavad aega, kuid dünaamiline programmeerimine töötab ainult siis, kui algne probleem võib laguneda väiksemateks võrranditeks, mida mingil hetkel võrrandi lahendamiseks uuesti kasutatakse.