Algortmusok és adatszerkezetek I. 10. előadás
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! Az előadás Horváth Gyula tananyaga felsználásával készült. Szláv Péter, Zsakó László: Adatszerkezetek I. 2/31
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 Szláv Péter, Zsakó László: Adatszerkezetek I. 3/31
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyekkel kfzethető-e F fornt? Megoldás: V(,): V:==P() vagy >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. Probléma: a futás dő O(2 N ) Szláv Péter, Zsakó László: Adatszerkezetek I. 4/31
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. Szláv Péter, Zsakó László: Adatszerkezetek I. 5/31
Dnamkus programozá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 Szláv Péter, Zsakó László: Adatszerkezetek I. 6/31
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ó. (Lehet): W(1..F):=ms; W(0):=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 Szláv Péter, Zsakó László: Adatszerkezetek I. 7/31
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! Szláv Péter, Zsakó László: Adatszerkezetek I. 8/31
Dnamkus programozás Feladat: Adott P 1,P 2, P n pénzjegyek közül melyekkel fzethető k F fornt? Megoldás: V N 1, V, 1 V, 1 N 0 1 egyébként 0 0 P N és és V P, 1 0 N Szláv Péter, Zsakó László: Adatszerkezetek I. 9/31
Dnamkus programozás : V(1..F,0):=N+1; V(0,0):=0 Cklus =1-től N-g V(0,):=0 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 A V mátrx kszámolása. Szláv Péter, Zsakó László: Adatszerkezetek I. 10/31
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 0 nem lesz. Szláv Péter, Zsakó László: Adatszerkezetek I. 11/31
Dnamkus programozás Db:=0; :=F; :=N Ha V(F,N) N akkor Cklus :=V(x,) Db:=Db+1; A(Db):= :=-P() :=-1 amíg 0 Cklus vége Eljárás vége. A megoldás előállítása. Szláv Péter, Zsakó László: Adatszerkezetek I. 12/31
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 Szláv Péter, Zsakó László: Adatszerkezetek I. 13/31
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: O, mn O N 1 0 O, 1, 1,1 O P, 1 0 0 0 0 és és és 0 P P Szláv Péter, Zsakó László: Adatszerkezetek I. 14/31
Dnamkus programozás (Mnmum): O(1..F,0):=N+1; O(0,0):=0 Cklus =1-től N-g O(0,):=0 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. Szláv Péter, Zsakó László: Adatszerkezetek I. 15/31
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 Szláv Péter, Zsakó László: Adatszerkezetek I. 16/31
Dnamkus programozás Szláv Péter, Zsakó László: Adatszerkezetek I. 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 ), ( 0 0 0 0 1, 17/31
Dnamkus programozás (O,V): O(1..F):=N+1; O(0):=0; V(1..F,0):=N+1 Cklus =1-től N-g O(0):=0; V(0,):=0 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. Szláv Péter, Zsakó László: Adatszerkezetek I. 18/31
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: Tegyük fel, hogy H S optmáls S... S... m 1 2 m 1 megoldás, azaz F maxmáls! F... F 1 2 m Ekkor H S s optmáls, azaz S S... S... m 1 2 m 1 1 m az adott részproblémának megoldása a megoldás megfelelő részlete. Szláv Péter, Zsakó László: Adatszerkezetek I. 19/31
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 0 E, 1, 1, F E S, 1 1 egyébként 1 1 1 és és és S S S 1 1 Szláv Péter, Zsakó László: Adatszerkezetek I. 20/31
Dnamkus programozás Hátzsák(): E(0..S(1)-1,1):=0; E(S(1)..H,1):=F(1) Cklus =2-től N-g Cklus =0-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. Szláv Péter, Zsakó László: Adatszerkezetek I. 21/31
Dnamkus programozás Kírás: :=N; :=H Cklus amíg E(,)>0 Cklus amíg >1 és E(,)=E(,-1) :=-1 Cklus vége K:, :=-S(); :=-1 Cklus vége Eljárás vége. Szláv Péter, Zsakó László: Adatszerkezetek I. 22/31
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! Szláv Péter, Zsakó László: Adatszerkezetek I. 23/31
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 0 Probléma: a rekurzó nem tékony! j j j és és S S S S j j Szláv Péter, Zsakó László: Adatszerkezetek I. 24/31
Dnamkus programozás Tükörszó Jó sorrendű táblázatktöltés kell: Itt s elég egyetlen sort tároln a táblázatból (T(j)=M(,j))? 1, j 1 Egy sor és egy elem s elég a táblázatból. Szláv Péter, Zsakó László: Adatszerkezetek I. 25/31
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):=0 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. Szláv Péter, Zsakó László: Adatszerkezetek I. 26/31
Dnamkus programozás Tükörszó Tükörszó(S,T): T(1):=0 Cklus j=2-től N-g T(j):=0; Ment:=0 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. Ez a megoldás nem alkalmas magának a tükörszónak az előállítására! Szláv Péter, Zsakó László: Adatszerkezetek I. 27/31
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)+1 akkor {S() a j. betű mögé} különben {S(j) az. betű elé} Cklus vége Eljárás vége. Szláv Péter, Zsakó László: Adatszerkezetek I. 28/31
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. Szláv Péter, Zsakó László: Adatszerkezetek I. 29/31
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. Szláv Péter, Zsakó László: Adatszerkezetek I. 30/31
Algortmusok és adatszerkezetek I. 10. előadás vége