Dnamkus programozás (Horváth Gyula és Szláv Péter előadása felsználásával)
Dnamkus programozás kncs Feladat: Egy N*M-es téglalap alakú területen egy járművel szedhetjük össze az elrejtett kncseket, a bal felső sarokból a jobb alsó felé ladva. A terep jobbra és lefelé lejt, azaz a jármű csak jobbra és lefelé ladt. Add meg, hogy maxmum hány kncset gyűjthet be!! A megoldás elemzése: Ha a megoldás egy L 1, L 2,,L j,, L k úton érhető el, akkor az L 1, L 2,,L j egy olyan út, amn elért pontban az odág begyűjthető legtöbb kncset kapjuk. Kezdőpozícó: (1,1) Végpozícó: (N,M) 218. 1. 19. 8:19 Zsakó László: Dnamkus programozás 2/15
Dnamkus programozás kncs Megoldás: Számítsuk k mnden lehetséges mezőre, hogy addg eljutva menny a maxmálsan begyűjthető kncsek száma! Gy, j max Gy 1, j,gy, j1 Kncs, j max Gy 1, j,gy, j1 1 Kncs, j 1 "" " " vagy j * * * * * * * * * 218. 1. 19. 8:19 Zsakó László: Dnamkus programozás 3/15
Dnamkus programozás A megoldás: Gy(N,M) kncs Kncsek: Gy(,1..M):=-1; Gy(1..N,):=-1 Cklus =1-től N-g Cklus j=1-től M-g Ha Kncs(,j)= * akkor k:=1 különben k:= Ha Gy(,j-1)>Gy(-1,j) akkor Gy(,j):=Gy(,j-1)+k különben Gy(,j):=Gy(-1,j)+k Cklus vége Cklus vége Eljárás vége. Gy, j max Gy 1, j,gy, j1 Kncs, j max Gy 1, j,gy, j1 1 Kncs, j 1 "" " " 218. 1. 19. 8:19 Zsakó László: Dnamkus programozás 4/15 vagy j
Dnamkus programozás kncs Ha a bejárt útra s szükségünk lenne, akkor a Gy mátrx alapján az út vsszakövethető. Azt kell fgyelnünk, hogy mnden helyre a nagyobb értékű szomszédból kellett jönnünk. Útkírás(,j): Ha 1 vagy j 1 akkor Ha Gy(,j-1)>Gy(-1,j) akkor Útkírás(,j-1); K: J különben Útkírás(-1,j); K: L Eljárás vége. A megoldás a számítások után: Útkírás(N,M) 218. 1. 19. 8:19 Zsakó László: Dnamkus programozás 5/15
Dnamkus programozás kncs Feladat: Egy N*M-es téglalap alakú területen egy járművel szedhetjük össze az elrejtett kncseket. A terep jobbra és lefelé lejt, azaz a jármű csak jobbra és lefelé ladt. Bzonyos helyeken akadályok vannak, ahova nem léphet! Add meg, hogy maxmum hány kncset gyűjthet be!! A megoldás elemzése: Ha a megoldás egy L 1, L 2,,L j,, L k úton érhető el, akkor az L 1, L 2,,L j egy olyan út, amn elért pontban az odág begyűjthető legtöbb kncset kapjuk. Kezdőpozícó: (1,1) Végpozícó: (N,M) 218. 1. 19. 8:19 Zsakó László: Dnamkus programozás 6/15
Dnamkus programozás kncs Megoldás: Számítsuk k mnden lehetséges mezőre, hogy addg eljutva menny a maxmálsan begyűjthető kncsek száma! Gy, j max max N M Kncs, j Gy 1, j, Gy, j 1 Kncs, j Gy 1, j, Gy, j 1 1 Kncs, j * * * + + * * + * + + * * * * + 218. 1. 19. 8:19 Zsakó László: Dnamkus programozás 7/15 " " "" " " vagy j
Dnamkus programozás kncs Kncsek: Gy(,1..M):=; Gy(1..N,):= Cklus =1-től N-g Cklus j=1-től M-g Ha Kncs(,j)= * akkor k:=1 különben k:= Ha Kncs(,j)= + akkor Gy(,j):=-N*M különben Gy(,j-1)>Gy(-1,j) akkor Gy(,j):=Gy(,j-1)+k különben Gy(,j):=Gy(-1,j)+k Cklus vége Cklus vége Eljárás vége. A megoldás: Gy(N,M) 218. 1. 19. 8:19 Zsakó László: Dnamkus programozás 8/15
Dnamkus programozás kncs Feladat: Egy N*M-es téglalap alakú területen egy járművel szedhetjük össze az elrejtett kncseket. A terep balról jobbra lejt, azaz a jármű csak jobbra, felfelé és lefelé ladt. Add meg, hogy maxmum hány kncset gyűjthet be! Mnden mezőre csak egyszer léphetünk! A megoldás elemzése: Ha a megoldás egy L 1, L 2,,L j,, L k úton érhető el, akkor az L 1, L 2,,L j egy olyan út, amn elért pontban az odág begyűjthető legtöbb kncset kapjuk, e de jöhetünk lentről s. Kezdőpozícó: (1,1) Végpozícó: (N,M) 218. 1. 19. 8:19 Zsakó László: Dnamkus programozás 9/15
Dnamkus programozás kncs Megoldás: Számítsuk k mnden lehetséges mezőre, hogy addg eljutva menny a maxmálsan begyűjthető kncsek száma, lentről, lletve, fentről léptünk be! L, j max L 1, j, L, j 1, F, j 1 Kncs, j max L 1, j, L, j 1, F, j 1 1 Kncs, j "" " " vagy j F, j max F 1, j, L, j 1, F, j 1 Kncs, j max F 1, j, L, j 1, F, j 1 1 Kncs, j "" " " vagy j 218. 1. 19. 8:19 Zsakó László: Dnamkus programozás 1/15
Dnamkus programozás kncs Kncsek: L(N+1,1..M):=-1; L(1..N,):=-1 F(,1..M):=-1; F(1..N,):=-1 Cklus j=1-től M-g Cklus =1-től N-g Ha Kncs(,j)= * akkor k:=1 különben k:= F(,j):=max(F(-1,j),L(,j-1),F(,j-1))+k Cklus vége Cklus =N-től 1-g -1-esével Ha Kncs(,j)= * akkor k:=1 különben k:= L(,j):=max(L(+1,j),L(,j-1),F(,j-1))+k Cklus vége Cklus vége Eljárás vége. A megoldás: F(N,M) 218. 1. 19. 8:19 Zsakó László: Dnamkus programozás 11/15
Dnamkus programozás leghosszabb közös rész Feladat: Adjuk meg két sorozat =(x 1,x 2, x n ) és Y=(y 1,y 2, y m ) leghosszabb közös részsorozatát! Egy sorozat akkor részsorozata egy másknak, abból elemek elgyásával megkaptó. Megoldás: Jelölje =(x 1,x 2, x ) az, YY j =(y 1,y 2, y j ) pedg az Y sorozat egy-egy prefxét! Legyen Z=(z 1,z 2, z k ) egy megoldása a feladatnak! 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 12/15
Dnamkus programozás leghosszabb közös rész A megoldás elemzése: Ha x n =y m, akkor z k =x n =y m, és ZZ k-1 az n-1 és YY m-1 leghosszabb közös részsorozata. Ha x n y m, akkor Z az n-1 és Y vagy az és YY m-1 leghosszabb közös részsorozata. Az és YY j leghosszabb közös részsorozatának hossza: h, j h 1, j 1 1 max h 1, j, h, j 1 egyébként x y j vagy j 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 13/15
Dnamkus programozás leghosszabb közös rész A rekurzív algortmus: Hossz(,j): Ha = vagy j= akkor Hossz:= különben ()=Y(j) akkor Hossz:=Hossz(-1,j-1)+1 különben Hossz:=max(Hossz(-1,j),Hossz(,j-1)) Függvény vége. h, j h 1, j 1 1 max h 1, j, h, j 1 egyébként x y j vagy j 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 14/15
Dnamkus programozás leghosszabb közös rész A jó megoldás rekurzó memorzálással: Hossz(,j): Ha H(,j)=-1 akkor Ha = vagy j= akkor H(,j):= különben ()=Y(j) akkor H(,j):=Hossz(-1,j-1)+1 különben H(,j):=max(Hossz(-1,j),Hossz(,j-1)) Elágazás vége Hossz:=H(,j) Függvény vége. Azaz, amt már egyszer kszámoltunk, azt tároljuk és ne számoljuk k újra! A H mátrxot kezdetben -1 értékekkel töltjük k! h, j h 1, j 1 1 max h 1, j, h, j 1 egyébként x y j vagy 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 15/15 j
Dnamkus programozás toronyépítés Feladat: Adott M 1,M 2, M n méretű kockákból (amelyek súly szernt csökkenő sorrendbe vannak rendezve) építsünk maxmáls magasságú stabl tornyot! A stabl toronyban felfelé ladva a méret és a súly s csökken. Megoldás: Tegyük fel, hogy M megoldás! ; M ;...; M... 1 2 k 1 k Ekkor n= k-1 -re M ; M ;...; 1... s megoldás, azaz 1 M 2 k1 k1 az adott részproblémának megoldása a megoldás megfelelő részlete. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 16/15
Dnamkus programozás toronyépítés Tehát a feladat a legmagasabb olyan torony magasságának kszámolása, ahol az. kocka van legfelül: Kocka 1 2 Kocka Kocka max... M M M egyébként M M M M 1 2 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 17/15
Dnamkus programozás toronyépítés A rekurzív megoldás: Kocka(): K:=M() Cklus j=1-től -1-g Ha M() M(j) akkor Ha Kocka(j)+M()>K akkor K:=Kocka(j)+M() Cklus vége Kocka:=K Függvény vége. A rengeteg rekurzív hívás matt nagyon lassú. Láttó azonban, hogy Kocka() kszámításához csak a korábbakra van szükség. 1 2 Kocka M Kocka M Kocka max... M egyébként 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 18/15 M M M M 1 2
Dnamkus programozás toronyépítés Toronyépítés: Kocka(1):=M(1) Cklus =2-től N-g K:=M() Cklus j=1-től -1-g Ha M() M(j) akkor Ha Kocka(j)+M()>K akkor K:=Kocka(j)+M() Cklus vége Kocka():=K Cklus vége Eljárás vége. A táblázatktöltős megoldás. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 19/15
Dnamkus programozás toronyépítés Ezzel még nncs kész a megoldás, csak azt tudjuk mnden -re, hogy mekkora a legmagasabb torony, amkor az -edk kocka van felül. A megoldás ezen számok maxmuma. Ha bevezetnénk egy N+1., méretű kockát, akkor a megoldás értéke Kocka(N+1) lenne. Ha a tornyot fel s kellene építen, akkor még azt s tároln kell, hogy melyk kockát melykre kell rátenn. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 2/15
Dnamkus programozás toronyépítés Toronyépítés: Kocka(1):=M(1); Mre(1):=; M(N+1):= Cklus =2-től N+1-g K:=M(); Mre():= Cklus j=1-től -1-g Ha M() M(j) akkor Ha Kocka(j)+M()>K akkor K:=Kocka(j)+M(); Mre():=j Cklus vége Kocka():=K Cklus vége Eljárás vége. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 21/15
Dnamkus programozás toronyépítés Torony: Toronyépítés Toronykírás(N+1) Eljárás vége. Toronykírás(): Ha Mre()> akkor Toronykírás(Mre()) K: Mre() Eljárás vége. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 22/15
Dnamkus programozás kemence Feladat: Egy fazekasműhelyben N tárgy vár kégetésre. A kemencébe a beérkezés sorrendjében tehetők be, egyszerre legfeljebb K darab. Mnden tárgynak smerjük a mnmáls égetés dejét, amennyt legalább a kemencében kell töltene. Adjuk meg a mnmáls dőt, am alatt mnden tárgy kégethető! Megoldás: Tegyük fel, hogy ((1,, 1 ),, ( m-1 +1,,N)) a megoldás! Ekkor az N. tárgy vagy önmagában kerül a kemencébe, vagy legfeljebb K-1 előző tárggyal együtt. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 23/15
Dnamkus programozás kemence Számítsuk k az első tárgy kégetéséhez szükséges dőt! Idő mn Idő Idő 1 Éget j 1 max Éget j.. ahol j 1 K 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 24/15
Dnamkus programozás kemence Kemence: Idő():= Cklus =1-től N-g H:=Idő(-1)+Éget(); max:=éget(); G:= j:=-1 Cklus amíg j> és +j-1 K Ha max<éget(j) akkor max:=éget(j) Ha Idő(j-1)+max<H akkor H:=Idő(j-1)+max; G:=j j:=j-1 Cklus vége Idő():=H; Db():=-G+1 Cklus vége Eljárás vége. Idő mn Idő Idő 1 Éget j 1 max Éget j.. ahol j 1 K 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 25/15
Dnamkus programozás kemence Feladat: Egy fazekasműhelyben N tárgy vár kégetésre. A kemencébe a beérkezés sorrendjében tehetők be, egyszerre legfeljebb S összsúlyú tárgy tehető. Mnden tárgynak smerjük a mnmáls égetés dejét, amennyt legalább a kemencében kell töltene. Adjuk meg a mnmáls dőt, am alatt mnden tárgy kégethető! 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 26/15
Dnamkus programozás kemence Megoldás: Tegyük fel, hogy ((1,, 1 ),, ( m-1 +1,,N)) a megoldás! Ekkor az N. tárgy vagy önmagában kerül a kemencébe, vagy legfeljebb S súlyú előző tárggyal együtt. Számítsuk k az első tárgy kégetéséhez szükséges dőt! Idő mn Idő Idő 1 Éget j 1 max Éget j.. ahol Súly j.. S 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 27/15
Dnamkus programozás kemence Kemence: Idő():= Cklus =1-től N-g H:=Idő(-1)+Éget(); max:=éget(); G:= j:=-1; Su:=Súly() Cklus amíg j> és Su+Súly(j) S Ha max<éget(j) akkor max:=éget(j) Su:=Su+Súly(j) Ha Idő(j-1)+max<H akkor H:=Idő(j-1)+max; G:=j j:=j-1 Cklus vége Idő():=H; Db():=-G+1 Cklus vége Eljárás vége. Idő mn Idő Idő 1 Éget j 1 max Éget j.. ahol Súly j.. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 28/15 S
Dnamkus programozás Tükörszó Feladat: Egy szóba mnmálsan hány karaktert kell beszúrn, hogy tükörszó legyen belőle (azaz ugyanaz legyen balról-jobbra és jobbról balra olvasva s)! Megoldás: Tetszőleges S szóra az SS T szó bztos tükörszó, tehát a feladatnak kell legyen megoldása! Alternatív feladat: mnmálsan hány betűt kell töröln? 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 29/15
Dnamkus programozás Tükörszó Az egybetűs szavak bztosan tükörszavak. Az azonos kezdő- és végbetűjű szavak tükörszóvá alakításához elég a középső rész átalakítása. Ha az első és az utolsó betű különbözk, akkor két lehetőségünk van a tükörszóvá alakításra: az első betűt szúrjuk be a szó végére; az utolsó betűt szúrjuk be a szó elejére. M, j M 1, j 1 1 mn M 1, j, M, j 1 Probléma: a rekurzó nem tékony! j j j és és S S S S j j 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 3/15
Dnamkus programozás Tükörszó Jó sorrendű táblázatktöltés kell: 1, j 1 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 31/15
Dnamkus programozás Tükörszó Tükörszó(S,M): M() kezdő feltöltése Cklus j=2-től N-g M(j,j):= Cklus =j-1-től 1-g -1-esével Ha S()=S(j) akkor M(,j):=M(+1,j-1) különben M(,j):=1+Mn(M(+1,j),M(,j-1)) Cklus vége Cklus vége Tükörszó:=M(1,N) Függvény vége. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 32/15
Dnamkus programozás Tükörszó Tükörszó(S,T): T(1):= Cklus j=2-től N-g T(j):=; Ment:= Cklus =j-1-től 1-g -1-esével Ment:=T() Ha S()=S(j) akkor T():=Ment különben T():=1+Mn(T(),T(+1)) Ment:=Ment Cklus vége Cklus vége Tükörszó:=T(1) Függvény vége. Mátrx (M) helyett vektor (T) sználatával. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 33/15
Dnamkus programozás Tükörszó Tükörszó kírása: Ha Tükörszó(S,E) akkor :=1; j:=n Cklus amíg <j Ha S()=S(j) akkor :=+1; j:=j-1 különben Ha M(,j)=M(+1,j) akkor {S() a j. betű mögé} különben {S(j) az. betű elé} Cklus vége Eljárás vége. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 34/15
Dnamkus programozás rúd darabolás Feladat: Egy fémrudat megadott számú darabra kell felvágn úgy, hogy a vágások pontos helyét s tudjuk. A vágások tetszőleges sorrendben elvégezhetőek. Egy vágás költsége megegyezk annak a darabnak a hosszával, amt éppen (két darabra) vágunk. Adjuk meg a vágás műveletsor optmáls összköltségét, és egy olyan vágás sorrendet, amely optmáls költséget eredményez. A megoldás elemzése: Ha az optmáls vágássorozatban először a K. helyen történk a vágás, akkor a V..V k és a V k..v n+1 rúd vágássorozata s optmáls lesz. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 35/15
Dnamkus programozás rúd darabolás Megoldás: Számítsuk k mnden (,j) rúddarabra, hogy m ennek az optmáls vágás költsége! Opt, j V j V mn Opt j1,k Opt k, j k1 j 1 1 j 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 36/15
Dnamkus programozás rúd darabolás Kncsek: Cklus =-tól N-g Opt(,+1):=; S(,+1):= Cklus vége Cklus u=2-től N+1-g Cklus =-töl N-u+1-g j:=+u; Mn:=+ Cklus k=+1-től j-1-g Ha Opt(,k)+Opt(k,j)<Mn akkor Mn:=Opt(,k)+Opt(k,j); Hol:=k Cklus vége Opt(,j):=V(j)-V()+Mn; S(,j):=Hol Cklus vége Cklus vége Eljárás vége. A megoldás: Opt(,N+1) 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 37/15
Dnamkus programozás stratégája A dnamkus programozás stratégája 1. Az [optmáls] megoldás szerkezetének tanulmányozása. 2. Részproblémákra és összetevőkre bontás úgy, hogy: az összetevőktől való függés körmentes legyen; mnden részprobléma [optmáls] megoldása kfejezhető legyen (rekurzívan) az összetevők [optmáls] megoldásaval. 3. Részproblémák [optmáls] megoldásának kfejezése (rekurzívan) az összetevők [optmáls] megoldásaból. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 38/15
Dnamkus programozás stratégája 4. Részproblémák [optmáls] megoldásának kszámítása alulról-felfelé ladva: A részproblémák kszámítás sorrendjének megtározása. Olyan sorba kell rakn a részproblémákat, hogy mnden p részprobléma mnden összetevője ( van) előbb szerepeljen a felsorolásban, mnt p. A részproblémák kszámítása alulról-felfelé ladva, azaz táblázatktöltéssel. 5. Egy [optmáls] megoldás előállítása a 4. lépésben kszámított (és tárolt) nformácókból. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 39/15
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyekkel kfzethető-e F fornt? Megoldás: Tegyük fel, hogy F P P... P... m! 1 2 m 1 Ekkor F P P P P......, azaz az adott m 1 2 m 1 1 m részproblémának megoldása a megoldás megfelelő részlete. Ezek alapján számoljuk k V(,) értékeket, ahol V(,) gaz, az összeg kfzethető az első pénzjeggyel! 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 4/78
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyekkel kfzethető-e F fornt? Megoldás: Három esetet vzsgálunk: az összeg megegyezk az -edk pénzjeggyel; az -edk pénzjegyet nem sználjuk fel; az -edk pénzjegyet felsználjuk: V P, gaz 1 és V, 1 x 1 és P és V P, 1 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 41/78
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyekkel kfzethető-e F fornt? Megoldás: V(,): V:==P() vagy, gaz 1 és V, 1 >1 és V(,-1) vagy >1 és P() és V(-P(),-1) Függvény vége. A megoldás: V(F,N) kszámolása. V P x 1 és P és V P, 1 Probléma: a futás dő O(2 N ) 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 42/78
Dnamkus programozás V(,) kszámításához mely V() értékekre lehet szükség? Az ábra alapján V értéke alulról felfelé, azon belül balról jobbra számoltók. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 43/78
Dnamkus programozás Pénzváltás(Lehet): V(1..F,1):=ms Ha P(1) F akkor V(P(1),1):=gaz Cklus =2-től N-g Cklus =1-től F-g V(,):==P() vagy V(,-1) vagy P() és V(-P(),-1) Cklus vége Cklus vége Lehet:=V(F,N) Függvény vége. A futás dő O(N*F) Memóragény: N*F 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 44/78
Dnamkus programozás Memóragény csökkentés: elég egyetlen sort tároln a V mátrxból, és az első feltétel s megtakaríttó. Pénzváltás(Lehet): W(1..F):=ms; W():=gaz Ha P(1) F akkor W(P(1)):=gaz Cklus =2-től N-g Cklus =F-től 1-g -1-esével W():=W() vagy P() és W(-P()) Cklus vége Cklus vége Lehet:=W(F) Függvény vége. A futás dő O(N*F) Memóragény: F 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 45/78
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyek közül melyekkel fzethető k F fornt? Megoldás: Legyen V(,) a legutolsó olyan k ndex, amelyre gaz, hogy P k előfordul felváltásában! Legyen V(,)=N+1, nem válttó fel az első pénzjeggyel! 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 46/78
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyek közül melyekkel fzethető k F fornt? Megoldás: egyébként N N P V és P N V V és N V 1 1, 1, 1, 1, 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 47/78
Dnamkus programozás Pénzváltás: A V mátrx kszámolása. V(1..F,):=N+1; V(,):= Cklus =1-től N-g V(,):= Cklus =1-től F-g Ha V(,-1) N akkor V(,):=V(,-1) különben P() és V(-P(),-1) N akkor V(,):= különben V(,):=N+1 Cklus vége Cklus vége V N 1, V, 1 V, 1 N 1 egyébként P N és és V P, 1 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 48/78 N
Dnamkus programozás Csak akkor van megoldás, V(F,N) N. Ekkor k=v(f,n) olyan pénz ndexe, hogy F-P(k) felválttó az első k-1 pénzzel. Tehát a V(F-P(k),k-1) probléma megoldásával kell folytatnunk, mndaddg, amíg a maradék pénz nem lesz. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 49/78
Dnamkus programozás Db:=; :=F; :=N Ha V(F,N) N akkor Cklus :=V(x,) Db:=Db+1; A(Db):= :=-P() :=-1 amíg Cklus vége Eljárás vége. A megoldás előállítása. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 5/78
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyek közül a lehető legkevesebbet sználva mennyvel fzethető k F fornt? Megoldás: Tegyük fel, hogy F P P P... optmáls m... 1 1 2 felbontás! Ekkor F P P P... P... m s optmáls, azaz m 1 2 m 1 1 az adott részproblémának megoldása a megoldás megfelelő részlete. m 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 51/78
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyek közül a lehető legkevesebbet sználva mennyvel fzethető k F fornt? Megoldás: P és P O O P és O és N O 1, 1,1, mn 1, 1, 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 52/78
O Dnamkus programozás Pénzváltás(Mnmum): O(1..F,):=N+1; O(,):= Cklus =1-től N-g O(,):= Cklus =1-től F-g Ha <P() akkor O(,):=O(,-1) különben O(,):=mn(O(,-1), 1+O(-P(),-1)) Cklus vége Cklus vége Eljárás vége., mn O N 1 O, 1, 1,1 O P, 1 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 53/78 és és és P P
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyek közül a lehető legkevesebbet sználva melyekkel fzethető k F fornt? Megoldás: Tegyük fel, hogy F P P P... optmáls m... 1 1 2 felbontás! Ekkor F P P P... P... m s optmáls, azaz m 1 2 m 1 1 az adott részproblémának megoldása a megoldás megfelelő részlete. m 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 54/78
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyek közül a lehető legkevesebbet sználva melyekkel fzethető k F fornt? Megoldás: egyébként V P O O és P és N V 1, 1, 1 ), ( 1, 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 55/78
Dnamkus programozás Pénzváltás(O,V): O(1..F):=N+1; O():=; V(1..F,):=N+1 Cklus =1-től N-g O():=; V(,):= Cklus =F-től 1-g -1-esével Ha P() akkor S:=O(-P())+1 különben S:=N+1 Ha S<O() akkor O():=S; V(,):= különben V(,):=V(,-1) Cklus vége Cklus vége Eljárás vége. V, V N 1, 1 egyébként P és és O(, ) 1 O 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 56/78 P, 1
Dnamkus programozás Feladat: Két testvér adott értékű ajándékokon osztozkodk. Mnden egyes ajándékot pontosan ez egyk testvérnek kell adn. Készíts testvéres osztozkodást, azaz olyat, amelyben a két testvér által kapott ajándékok értéke különbségének abszolút értéke mnmáls! Megoldás: Ha az ajándékok összértéke E, akkor a feladat megoldása a legnagyobb olyan A E/2 szám, amely érték az ajándékok értékeből kétféleképpen s előállíttó. Tehát a megoldás vsszavezethető a pénzváltás probléma megoldására. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 57/78
Megoldás: V(,): V:==P() vagy Dnamkus programozás V P x, gaz 1 és V, 1 >1 és V(,-1) vagy >1 és P() és V(-P(),-1) Függvény vége. A megoldás: a legnagyobb olyan A kválasztása (1 és E/2 között), amelyre V(A,N) gaz. 1 és P és V P, 1 Probléma: a futás dő O(2 N ) 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 58/78
Dnamkus programozás V(,) kszámításához mely V() értékekre lehet szükség? Az ábra alapján V értéke alulról felfelé, azon belül balról jobbra számoltók. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 59/78
Dnamkus programozás Testvéres osztozkodás(a): V(1..E,1):=ms Ha P(1) E akkor V(P(1),1):=gaz Cklus =2-től N-g Cklus =1-től E-g V(,):==P() vagy V(,-1) vagy P() és V(-P(),-1) Cklus vége Cklus vége Eredmény megadása(a,v,e,n) Függvény vége. A futás dő O(N*F) Memóragény: N*F 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 6/78
Dnamkus programozás Eredmény megadása(a,v,e,n): A:=E/2 Cklus amíg nem V(A,N) A:=A-1 Cklus vége Függvény vége. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 61/78
Dnamkus programozás Feladat: Két testvér adott értékű ajándékokon osztozkodk. Mnden egyes ajándékot pontosan ez egyk testvérnek kell adn. Készíts gazságos osztozkodást, azaz olyat, amelyben a két testvér által kapott ajándékok értéke egyforma, a maradék értéke pedg mnmáls! Megoldás: Ha az ajándékok összértéke E, mndkét testvér A értékű ajándékot kap. A feladat megoldása a legnagyobb olyan A E/2 szám, amely érték az ajándékok értékeből kétféleképpen előállíttó. Tehát a megoldás vsszavezethető a pénzváltás probléma megoldására. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 62/78
Dnamkus programozás Megoldás: Legyen V(,Y,) gaz, az első ajándékból és Y értékű s előállíttó úgy, hogy mndegyk szám legfeljebb az egyk összegben szerepel! Legyen V(,,)=gaz mnden -re, V(,Y,) ms mnden,y-ra! V(,Y,)-re a következő rekurzív összefüggés írtó fel > esetén: V,Y, gaz V,Y, 1 P P Y és és V P,Y, 1 V, Y P, 1 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 63/78
Dnamkus programozás Megoldás: Legyen V(,Y,) gaz, az első ajándékból és Y érték s előállíttó úgy, hogy mndegyk legfeljebb az egyk összegben szerepel! Legyen V(,,)=gaz mnden -re, V(,Y,) ms mnden,y-ra! V(,Y,): Ha = akkor V:=ms különben = és Y= akkor V:=gaz különben V:=V(,Y,-1) vagy P() és V(-P(),Y,-1) vagy P()Y és V(,Y-P(),-1) Függvény vége. A megoldás: a legnagyobb olyan A kválasztása (1 és E/2 között), amelyre V(A,A,N) gaz. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 64/78
Dnamkus programozás Igazságos osztozkodás(a): V(1..E,1..E,1):=ms; V(,,1):=gaz Ha P(1) E akkor V(P(1),,1):=gaz V(,P(1),1):=gaz Cklus =2-től N-g Cklus =1-től E-g Cklus Y=1-től E-g V(,Y,):=V(,Y,-1) vagy P() és V(-P(),Y,-1) vagy P()Y és V(,Y-P(),-1) Cklus vége Cklus vége Eredmény megadása(a,v,e,n) Függvény vége. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 65/78
Dnamkus programozás Eredmény megadása(a,v,e,n): A:=E/2 Cklus amíg nem V(A,A,N) A:=A-1 Cklus vége Függvény vége. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 66/78
Dnamkus programozás Hátzsák feladat... 1 Feladat: Adott N tárgy (értékük F, súlyuk S ). Egy hátzsákba maxmum H súlyú tárgyat pakoltunk. Menny a maxmáls elszállíttó érték? Megoldás: Tegyük fel, hogy H S S S... optmáls meg- m 1 2 oldás, azaz F F... F maxmáls! 1 2 m Ekkor H S S S... S... m s optmáls, azaz az m 1 2 m 1 1 adott részproblémának megoldása a megoldás megfelelő részlete. m 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 67/78
Dnamkus programozás Hátzsák feladat Feladat: Adott N tárgy (értékük F, súlyuk S ). Egy hátzsákba maxmum H súlyú tárgyat pakoltunk. Menny a maxmáls elszállíttó érték? Megoldás: Jelölje E(,) a legnagyobb elszállíttó értéket, amely az első tárgyból egy kapactású hátzsákba bepakoltó. E, max E F E, 1, 1, F E S, 1 1 egyébként 1 1 1 és és és S S S 1 1 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 68/78
Dnamkus programozás Hátzsák feladat Hátzsák(): E(..S(1)-1,1):=; E(S(1)..H,1):=F(1) Cklus =2-től N-g Cklus =-tól H-g E(,):=E(,-1) Ha S() és E(,)<E(-S(),-1)+F() akkor E(,):=E(-S(),-1)+F() Cklus vége Cklus vége Kírás Eljárás vége. E, max E F E, 1, 1, F E S, 1 1 egyébként 1 1 1 és és és S S S 1 1 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 69/78
Dnamkus programozás Hátzsák feladat Kírás: :=N; :=H Cklus amíg E(,)> Cklus amíg 1 és E(,)=E(,-1) :=-1 Cklus vége K:, :=-S(); :=-1 Cklus vége Eljárás vége. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 7/78
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyekkel kfzethető-e F fornt? Megoldás: Tegyük fel, hogy F P P... P... m! 1 2 m 1 Ekkor F P P P P......, azaz az adott m 1 2 m 1 1 m részproblémának megoldása a megoldás megfelelő részlete. Ezek alapján számoljuk k V(,) értékeket, ahol V(,) gaz, az összeg kfzethető az első pénzjeggyel! 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 71/78
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyekkel kfzethető-e F fornt? Megoldás: Három esetet vzsgálunk: az összeg megegyezk az -edk pénzjeggyel; az -edk pénzjegyet nem sználjuk fel; az -edk pénzjegyet felsználjuk: V P, gaz 1 és V, 1 x 1 és P és V P, 1 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 72/78
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyekkel kfzethető-e F fornt? Megoldás: V(,): V:==P() vagy, gaz 1 és V, 1 >1 és V(,-1) vagy >1 és P() és V(-P(),-1) Függvény vége. A megoldás: V(F,N) kszámolása. V P x 1 és P és V P, 1 Probléma: a futás dő O(2 N ) 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 73/78
Dnamkus programozás V(,) kszámításához mely V() értékekre lehet szükség? Az ábra alapján V értéke alulról felfelé, azon belül balról jobbra számoltók. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 74/78
Dnamkus programozás Pénzváltás(Lehet): V(1..F,1):=ms Ha P(1) F akkor V(P(1),1):=gaz Cklus =2-től N-g Cklus =1-től F-g V(,):==P() vagy V(,-1) vagy P() és V(-P(),-1) Cklus vége Cklus vége Lehet:=V(F,N) Függvény vége. A futás dő O(N*F) Memóragény: N*F 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 75/78
Dnamkus programozás Memóragény csökkentés: elég egyetlen sort tároln a V mátrxból, és az első feltétel s megtakaríttó. Pénzváltás(Lehet): W(1..F):=ms; W():=gaz Ha P(1) F akkor W(P(1)):=gaz Cklus =2-től N-g Cklus =F-től 1-g -1-esével W():=W() vagy P() és W(-P()) Cklus vége Cklus vége Lehet:=W(F) Függvény vége. A futás dő O(N*F) Memóragény: F 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 76/78
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyek közül melyekkel fzethető k F fornt? Megoldás: Legyen V(,) a legutolsó olyan k ndex, amelyre gaz, hogy P k előfordul felváltásában! Legyen V(,)=N+1, nem válttó fel az első pénzjeggyel! 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 77/78
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyek közül melyekkel fzethető k F fornt? Megoldás: egyébként N N P V és P N V V és N V 1 1, 1, 1, 1, 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 78/78
Dnamkus programozás Pénzváltás: A V mátrx kszámolása. V(1..F,):=N+1; V(,):= Cklus =1-től N-g V(,):= Cklus =1-től F-g Ha V(,-1) N akkor V(,):=V(,-1) különben P() és V(-P(),-1) N akkor V(,):= különben V(,):=N+1 Cklus vége Cklus vége V N 1, V, 1 V, 1 N 1 egyébként P N és és V P, 1 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 79/78 N
Dnamkus programozás Csak akkor van megoldás, V(F,N) N. Ekkor k=v(f,n) olyan pénz ndexe, hogy F-P(k) felválttó az első k-1 pénzzel. Tehát a V(F-P(k),k-1) probléma megoldásával kell folytatnunk, mndaddg, amíg a maradék pénz nem lesz. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 8/78
Dnamkus programozás Db:=; :=F; :=N Ha V(F,N) N akkor Cklus :=V(x,) Db:=Db+1; A(Db):= :=-P() :=-1 amíg Cklus vége Eljárás vége. A megoldás előállítása. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 81/78
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyek közül a lehető legkevesebbet sználva mennyvel fzethető k F fornt? Megoldás: Tegyük fel, hogy F P P P... optmáls m... 1 1 2 felbontás! Ekkor F P P P... P... m s optmáls, azaz m 1 2 m 1 1 az adott részproblémának megoldása a megoldás megfelelő részlete. m 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 82/78
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyek közül a lehető legkevesebbet sználva mennyvel fzethető k F fornt? Megoldás: P és P O O P és O és N O 1, 1,1, mn 1, 1, 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 83/78
O Dnamkus programozás Pénzváltás(Mnmum): O(1..F,):=N+1; O(,):= Cklus =1-től N-g O(,):= Cklus =1-től F-g Ha <P() akkor O(,):=O(,-1) különben O(,):=mn(O(,-1), 1+O(-P(),-1)) Cklus vége Cklus vége Eljárás vége., mn O N 1 O, 1, 1,1 O P, 1 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 84/78 és és és P P
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyek közül a lehető legkevesebbet sználva melyekkel fzethető k F fornt? Megoldás: Tegyük fel, hogy F P P P... optmáls m... 1 1 2 felbontás! Ekkor F P P P... P... m s optmáls, azaz m 1 2 m 1 1 az adott részproblémának megoldása a megoldás megfelelő részlete. m 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 85/78
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyek közül a lehető legkevesebbet sználva melyekkel fzethető k F fornt? Megoldás: egyébként V P O O és P és N V 1, 1, 1 ), ( 1, 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 86/78
Dnamkus programozás Pénzváltás(O,V): O(1..F):=N+1; O():=; V(1..F,):=N+1 Cklus =1-től N-g O():=; V(,):= Cklus =F-től 1-g -1-esével Ha P() akkor S:=O(-P())+1 különben S:=N+1 Ha S<O() akkor O():=S; V(,):= különben V(,):=V(,-1) Cklus vége Cklus vége Eljárás vége. V, V N 1, 1 egyébként P és és O(, ) 1 O 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 87/78 P, 1
Dnamkus programozás Feladat: Két testvér adott értékű ajándékokon osztozkodk. Mnden egyes ajándékot pontosan ez egyk testvérnek kell adn. Készíts testvéres osztozkodást, azaz olyat, amelyben a két testvér által kapott ajándékok értéke különbségének abszolút értéke mnmáls! Megoldás: Ha az ajándékok összértéke E, akkor a feladat megoldása a legnagyobb olyan A E/2 szám, amely érték az ajándékok értékeből kétféleképpen s előállíttó. Tehát a megoldás vsszavezethető a pénzváltás probléma megoldására. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 88/78
Megoldás: V(,): V:==P() vagy Dnamkus programozás V P x, gaz 1 és V, 1 >1 és V(,-1) vagy >1 és P() és V(-P(),-1) Függvény vége. A megoldás: a legnagyobb olyan A kválasztása (1 és E/2 között), amelyre V(A,N) gaz. 1 és P és V P, 1 Probléma: a futás dő O(2 N ) 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 89/78
Dnamkus programozás V(,) kszámításához mely V() értékekre lehet szükség? Az ábra alapján V értéke alulról felfelé, azon belül balról jobbra számoltók. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 9/78
Dnamkus programozás Testvéres osztozkodás(a): V(1..E,1):=ms Ha P(1) E akkor V(P(1),1):=gaz Cklus =2-től N-g Cklus =1-től E-g V(,):==P() vagy V(,-1) vagy P() és V(-P(),-1) Cklus vége Cklus vége Eredmény megadása(a,v,e,n) Függvény vége. A futás dő O(N*F) Memóragény: N*F 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 91/78
Dnamkus programozás Eredmény megadása(a,v,e,n): A:=E/2 Cklus amíg nem V(A,N) A:=A-1 Cklus vége Függvény vége. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 92/78
Dnamkus programozás Feladat: Két testvér adott értékű ajándékokon osztozkodk. Mnden egyes ajándékot pontosan ez egyk testvérnek kell adn. Készíts gazságos osztozkodást, azaz olyat, amelyben a két testvér által kapott ajándékok értéke egyforma, a maradék értéke pedg mnmáls! Megoldás: Ha az ajándékok összértéke E, mndkét testvér A értékű ajándékot kap. A feladat megoldása a legnagyobb olyan A E/2 szám, amely érték az ajándékok értékeből kétféleképpen előállíttó. Tehát a megoldás vsszavezethető a pénzváltás probléma megoldására. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 93/78
Dnamkus programozás Megoldás: Legyen V(,Y,) gaz, az első ajándékból és Y értékű s előállíttó úgy, hogy mndegyk szám legfeljebb az egyk összegben szerepel! Legyen V(,,)=gaz mnden -re, V(,Y,) ms mnden,y-ra! V(,Y,)-re a következő rekurzív összefüggés írtó fel > esetén: V,Y, gaz V,Y, 1 P P Y és és V P,Y, 1 V, Y P, 1 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 94/78
Dnamkus programozás Megoldás: Legyen V(,Y,) gaz, az első ajándékból és Y érték s előállíttó úgy, hogy mndegyk legfeljebb az egyk összegben szerepel! Legyen V(,,)=gaz mnden -re, V(,Y,) ms mnden,y-ra! V(,Y,): Ha = akkor V:=ms különben = és Y= akkor V:=gaz különben V:=V(,Y,-1) vagy P() és V(-P(),Y,-1) vagy P()Y és V(,Y-P(),-1) Függvény vége. A megoldás: a legnagyobb olyan A kválasztása (1 és E/2 között), amelyre V(A,A,N) gaz. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 95/78
Dnamkus programozás Igazságos osztozkodás(a): V(1..E,1..E,1):=ms; V(,,1):=gaz Ha P(1) E akkor V(P(1),,1):=gaz V(,P(1),1):=gaz Cklus =2-től N-g Cklus =1-től E-g Cklus Y=1-től E-g V(,Y,):=V(,Y,-1) vagy P() és V(-P(),Y,-1) vagy P()Y és V(,Y-P(),-1) Cklus vége Cklus vége Eredmény megadása(a,v,e,n) Függvény vége. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 96/78
Dnamkus programozás Eredmény megadása(a,v,e,n): A:=E/2 Cklus amíg nem V(A,A,N) A:=A-1 Cklus vége Függvény vége. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 97/78
Dnamkus programozás stratégája A dnamkus programozás stratégája 1. Az [optmáls] megoldás szerkezetének tanulmányozása. 2. Részproblémákra és összetevőkre bontás úgy, hogy: az összetevőktől való függés körmentes legyen; mnden részprobléma [optmáls] megoldása kfejezhető legyen (rekurzívan) az összetevők [optmáls] megoldásaval. 3. Részproblémák [optmáls] megoldásának kfejezése (rekurzívan) az összetevők [optmáls] megoldásaból. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 98/78
Dnamkus programozás stratégája 4. Részproblémák [optmáls] megoldásának kszámítása alulról-felfelé ladva: A részproblémák kszámítás sorrendjének megtározása. Olyan sorba kell rakn a részproblémákat, hogy mnden p részprobléma mnden összetevője ( van) előbb szerepeljen a felsorolásban, mnt p. A részproblémák kszámítása alulról-felfelé ladva, azaz táblázatktöltéssel. 5. Egy [optmáls] megoldás előállítása a 4. lépésben kszámított (és tárolt) nformácókból. 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 99/78
Dnamkus programozás tovább feladatok DNS A bológa szekvencák, különösen a DNS szekvencák vzsgálata nagyon fontos kutatás terület. Mnden DNS szekvenca leírtó olyan karaktersorozattal, amely csak az A, C, G és T karaktereket tartalmaztja. Számítsd k egy DNS szekvencának egy pontosan K betűből álló részsorozatát, amely a legtöbbször fordul elő a vzsgált szekvencában! 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 1/78
Dnamkus programozás tovább feladatok LEFED Azt mondjuk, hogy egész számok zárt ntervallumanak egy H lmaza lefed az [1,N] ntervallumot, az ntervallum mnden x eleméhez van olyan ntervallum H-ban, amelynek x eleme. Egy lefedés költségén a lefedéshez sznált ntervallumok hosszanak összegét értjük. Számítsd k, hogy adott [1,N] lefedendő ntervallum és lefedéshez sználtó ntervallumok egy H lmaza esetén mekkora a mnmáls lefedés költsége, létezk lefedés! 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 11/78
Dnamkus programozás tovább feladatok KÉPÁTLÓ Adott egy N x N pxelből álló fekete-fehér kép. Szeretnénk a képen a bal felső saroktól a jobb alsó sarokg egy jobbra-lefele ladó tárvonalat húzn úgy, hogy a vonaltól jobbra-felfele eső fekete, valamnt a vonaltól balra-lefele eső fehér pxelek számának K összege a lehető legkevesebb legyen. A tárvonalra eső pxelek nem számítanak bele. Add meg a mnmáls lyen K értéket! 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 12/78
Dnamkus programozás tovább feladatok CSOMAG A csomagküldő szolgálat központjában a beérkezés sorrendjében várakoznak a csomagok továbbításra. Mnden csomagnak smert a súlya. A cégnek két kamonja van, mndegyk azonos K kapactású. Mnden csomag súlya legfeljebb K. A lehető legtöbb csomagot akarják továbbítan a két kamonnal. Kszámítandó az a legnagyobb M szám (1 M N), hogy a sorban első M csomag mndegyke felpakoltó a két kamon valamelykére! 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 13/78
Dnamkus programozás tovább feladatok PAKOLÁS Egy raktárból konténereket kell elszállítan K kamonnal. A konténerek egy sorban egymás után helyezkednek el. Mnden konténer súlyát smerjük. Mnden kamonra csak a sorban egymást követő konténerek pakoltók. Azt szeretnék elérn, hogy a lehető legegyenletesebb legyen a kamonok terhelése, am azt jelent, hogy a maxmálsan terhelt kamon terhelése a lehető legksebb legyen. A kamonok súlykapactása legalább akkora, hogy mndegyk bztosan elbírja a rárakandó konténerek súlyát. Mnden kamonra legalább egy konténert kell rakn. Számíts k egy legegyenletesebb pakolást! 218. 1. 19. 8:18 Zsakó László: Dnamkus programozás 14/78
Dnamkus programozás előadás vége