Dinamikus programozás

Hasonló dokumentumok
Dinamikus programozás

Dinamikus programozás. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Algoritmusok és adatszerkezetek I. 10. előadás

Dinamikus programozás II.

Algoritmizálás, adatmodellezés tanítása 8. előadás

8. Programozási tételek felsoroló típusokra

Partíció probléma rekurzíómemorizálással

Fibonacci számok. Dinamikus programozással

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

A 2008/2009 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

A 2010/2011 tanévi Országos Középiskolai Tanulmányi Verseny második fordulójának megoldása. II. (programozás) kategória

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Dinamukus programozás

Egy negyedrendű rekurzív sorozatcsaládról

4 2 lapultsági együttható =

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

ALGORITMUSOK, ALGORITMUS-LEÍRÓ ESZKÖZÖK

Fuzzy rendszerek. A fuzzy halmaz és a fuzzy logika

Mátrix-vektor feladatok Összeállította dr. Salánki József egyetemi adjunktus Begépelte Dr. Dudás László és Bálint Gusztáv

Statisztikai próbák. Ugyanazon problémára sokszor megvan mindkét eljárás.

Kombinatorikai algoritmusok. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Kombinatorikai algoritmusok

Adatsorok jellegadó értékei

Kvantum-tömörítés II.

Mohó algoritmusok. Példa:

d(f(x), f(y)) q d(x, y), ahol 0 q < 1.

Adatszerkezetek II. 10. előadás

METROLÓGIA ÉS HIBASZÁMíTÁS

Bevezetés a programozásba. 3. Előadás Algoritmusok, tételek

/11 Változtatások joga fenntartva. Kezelési útmutató. UltraGas kondenzációs gázkazán. Az energia megőrzése környezetünk védelme

Példák ekvivalencia relációra (TÉTELként kell tudni ezeket zárthelyin, vizsgán):

KOMBINATORIKA ELŐADÁS osztatlan matematika tanár hallgatók számára. Szita formula

2. forduló. MEGOLDÁSOK Pontszerző Matematikaverseny 2014/2015 tanév. 1. Számkeresztrejtvény:

A sokaság/minta eloszlásának jellemzése

Programozási módszertan. Mohó algoritmusok

The original laser distance meter. The original laser distance meter

Dinamikus programozás

10. Alakzatok és minták detektálása

Az entrópia statisztikus értelmezése

3. Előadás. Megyesi László: Lineáris algebra, oldal. 3. előadás Lineáris egyenletrendszerek

Periodikus figyelésű készletezési modell megoldása általános feltételek mellett

Gyakorlatok. P (n) = P (n 1) + 2P (n 2) + P (n 3) ha n 4, (utolsó lépésként l, hl, u, hu-t léphetünk).

Alkalmazott modul: Programozás

Optimalizációs stratégiák 1.

Support Vector Machines

A 2014/2015 tanévi Országos Középiskolai Tanulmányi Verseny második forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

Matematika M1 1. zárthelyi megoldások, 2017 tavasz

Leica DISTOTMD510. X310 The original laser distance meter. The original laser distance meter

Tanult nem paraméteres próbák, és hogy milyen probléma megoldására szolgálnak.

Műszaki folyamatok közgazdasági elemzése. Kevert stratégiák és evolúciós játékok

MŰSZAKI TUDOMÁNYI DOKTORI ISKOLA. Napkollektorok üzemi jellemzőinek modellezése

ORVOSI STATISZTIKA. Az orvosi statisztika helye. Egyéb példák. Példa: test hőmérséklet. Lehet kérdés? Statisztika. Élettan Anatómia Kémia. Kérdések!

s n s x A m és az átlag Standard hiba A m becslése Információ tartalom Átlag Konfidencia intervallum Pont becslés Intervallum becslés

Mohó stratégia. Feladat: Megoldás:

9. Visszavezetés egyedi felsorolókkal

A 2013/2014 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

Gyakorló feladatok javítóvizsgára szakközépiskola matematika 9. évfolyam

Algoritmizálás, adatmodellezés tanítása 7. előadás

Dr. Ratkó István. Matematikai módszerek orvosi alkalmazásai Magyar Tudomány Napja. Gábor Dénes Főiskola

Elosztott rendszerek játékelméleti elemzése: tervezés és öszönzés. Toka László

OAF Gregorics Tibor: Minta dokumentáció a 4. házi feladathoz 1. Feladat. Megoldás

Másolásra épülő algoritmusok

A 2012/2013 tanévi Országos Középiskolai Tanulmányi Verseny második fordulójának megoldása. informatika II. (programozás) kategória

Egyszerű algoritmusok

Sorozatok I. Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma)

Közúti közlekedésüzemvitel-ellátó. Tájékoztató

Véletlenszám generátorok. 5. előadás

Döntéstámogató módszerek segédlet

OKTV 2007/2008 Informatika II. kategória döntő forduló Feladatlap. Oktatási Hivatal

Hipotézis vizsgálatok. Egy példa. Hipotézisek. A megfigyelt változó eloszlása Kérdés: Hatásos a lázcsillapító gyógyszer?

Visszalépéses kiválogatás

Időjárási csúcsok. Bemenet. Kimenet. Példa. Korlátok. Nemes Tihamér Nemzetközi Informatikai Tanulmányi Verseny, 2-3. korcsoport

43. ORSZÁGOS TIT KALMÁR LÁSZLÓ MATEMATIKAVERSENY MEGYEI FORDULÓ HATODIK OSZTÁLY JAVÍTÁSI ÚTMUTATÓ

Adatszerkezetek II. 6. előadás

KÖZLEKEDÉSI ALAPISMERETEK (KÖZLEKEDÉS-ÜZEMVITEL)

Schlüter -KERDI-BOARD. Közvetlenűl burkolható felületű építőlemez, többrétegű vízszigetelés

Relációk. Vázlat. Példák direkt szorzatra

Integrált rendszerek n é v; dátum

Vázlat. Relációk. Példák direkt szorzatra

Véletlenszám generátorok. 6. előadás

A 2011/2012 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

Programozási módszertan. Dinamikus programozás: A leghosszabb közös részsorozat

A 2012/2013 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

4 Approximációs algoritmusok szorzatalakú hálózatok esetén

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny második fordulójának feladatai. INFORMATIKA II. (programozás) kategória

A multikritériumos elemzés célja, alkalmazási területe, adat-transzformációs eljárások, az osztályozási eljárások lényege

Regresszió. Fő cél: jóslás Történhet:

CRT Monitor gammakarakteriszikájának

MATEMATIKAI STATISZTIKA KISFELADAT. Feladatlap

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

Töréskép optimalizálás Elmélet, megvalósítás, alkalmazás

Algoritmusok, adatszerkezetek I.

XI. ERDÉLYI TUDOMÁNYOS DIÁKKÖRI KONFERENCIA

Algoritmizálás és adatmodellezés 2. előadás

oktatási segédlet Kovács Norbert SZE, Gazdálkodástudományi tanszék október

Multihalmaz, intervallumhalmaz

KÖZBESZERZÉSI ADATBÁZIS

Programozás alapjai. 6. gyakorlat Futásidő, rekurzió, feladatmegoldás

5. feladatsor megoldása

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

Átírás:

Dnamkus programozás (Horváth Gyula és Szláv Péter előadása felhasználásával)

Dnamkus programozás Feladat: Adott P,P 2, P n pénzjegyekkel kfzethető-e F fornt? Megoldás: Tegyük fel, hogy F P P... P...! 2 m m Ekkor F P P P... P..., azaz az adott m 2 m m részproblémának megoldása a megoldás megfelelő részlete. Ezek alapján számoljuk k V(X,) értékeket, ahol V(X,) gaz, ha az X összeg kfzethető az első pénzjeggyel! 26..27. 4:8 2/78

Dnamkus programozás Feladat: Adott P,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 használjuk fel; az -edk pénzjegyet felhasználjuk: V P X, gaz és V X, x és X P és V X P, 26..27. 4:8 3/78

Dnamkus programozás Feladat: Adott P,P 2, P n pénzjegyekkel kfzethető-e F fornt? Megoldás: V(X,): V:=X=P() vagy P X, gaz és V X, > és V(X,-) vagy > és X P() és V(X-P(),-) Függvény vége. A megoldás: V(F,N) kszámolása. V x és X P és V X P, Probléma: a futás dő O(2 N ) 26..27. 4:8 4/78

Dnamkus programozás V(X,) 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ámolhatók. 26..27. 4:8 5/78

Dnamkus programozás Pénzváltás(Lehet): V(..F,):=hams Ha P() F akkor V(P(),):=gaz Cklus =2-től N-g Cklus X=-től F-g V(X,):=X=P() vagy V(X,-) vagy X P() és V(X-P(),-) 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 26..27. 4:8 6/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ítható. Pénzváltás(Lehet): W(..F):=hams; W():=gaz Ha P() F akkor W(P()):=gaz Cklus =2-től N-g Cklus X=F-től -g --esével W(X):=W(X) vagy X P() és W(X-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 26..27. 4:8 7/78

Dnamkus programozás Feladat: Adott P,P 2, P n pénzjegyek közül melyekkel fzethető k F fornt? Megoldás: Legyen V(X,) a legutolsó olyan k ndex, amelyre gaz, hogy P k előfordul X felváltásában! Legyen V(X,)=N+, ha X nem váltható fel az első pénzjeggyel! 26..27. 4:8 8/78

Dnamkus programozás Feladat: Adott P,P 2, P n pénzjegyek közül melyekkel fzethető k F fornt? Megoldás: egyébként N N P X V és P X ha N X V ha X V X ha X és ha N X V,,,, 26..27. 4:8 9/78

Dnamkus programozás Pénzváltás: A V mátrx kszámolása. V(..F,):=N+; V(,):= Cklus =-től N-g V(,):= Cklus X=-től F-g Ha V(X,-) N akkor V(X,):=V(X,-) különben ha X P() és V(X-P(),-) N akkor V(X,):= különben V(X,):=N+ Cklus vége Cklus vége V N X, V X, ha V X, ha ha ha X P és V X P, N 26..27. 4:8 N egyébként /78 X N és X

Dnamkus programozás Csak akkor van megoldás, ha V(F,N) N. Ekkor k=v(f,n) olyan pénz ndexe, hogy F-P(k) felváltható az első k- pénzzel. Tehát a V(F-P(k),k-) probléma megoldásával kell folytatnunk, mndaddg, amíg a maradék pénz nem lesz. 26..27. 4:8 /78

Dnamkus programozás Db:=; X:=F; :=N Ha V(F,N) N akkor Cklus :=V(x,) Db:=Db+; A(Db):= X:=X-P() :=- amíg X Cklus vége Eljárás vége. A megoldás előállítása. 26..27. 4:8 2/78

Dnamkus programozás Feladat: Adott P,P 2, P n pénzjegyek közül a lehető legkevesebbet használva mennyvel fzethető k F fornt? Megoldás: Tegyük fel, hogy F P P... P... optmáls 2 m m felbontás! Ekkor F P P P... P... m s optmáls, azaz m 2 m az adott részproblémának megoldása a megoldás megfelelő részlete. 26..27. 4:8 3/78

Dnamkus programozás Feladat: Adott P,P 2, P n pénzjegyek közül a lehető legkevesebbet használva mennyvel fzethető k F fornt? Megoldás: P X és ha P X O X O P X és ha X O X ha X és ha N X O,,, mn,, 26..27. 4:8 4/78

Dnamkus programozás Pénzváltás(Mnmum): O(..F,):=N+; O(,):= Cklus =-től N-g O(,):= Cklus X=-től F-g Ha X<P() akkor O(X,):=O(X,-) különben O(X,):=mn(O(X,-), +O(X-P(),-)) Cklus vége Cklus vége Eljárás vége. N ha és X ha X O X, O X, ha és X mn O X,, O X P, ha és X 26..27. 4:8 5/78 P P

Dnamkus programozás Feladat: Adott P,P 2, P n pénzjegyek közül a lehető legkevesebbet használva melyekkel fzethető k F fornt? Megoldás: Tegyük fel, hogy F P P... P... optmáls 2 m m felbontás! Ekkor F P P P... P... m s optmáls, azaz m 2 m az adott részproblémának megoldása a megoldás megfelelő részlete. 26..27. 4:8 6/78

Dnamkus programozás Feladat: Adott P,P 2, P n pénzjegyek közül a lehető legkevesebbet használva melyekkel fzethető k F fornt? Megoldás: egyébként X V P X O X O és P X ha X ha X és ha N X V,, ), (, 26..27. 4:8 7/78

Dnamkus programozás Pénzváltás(O,V): O(..F):=N+; O():=; V(..F,):=N+ Cklus =-től N-g O():=; V(,):= Cklus X=F-től -g --esével Ha X P() akkor S:=O(X-P())+ különben S:=N+ Ha S<O(X) akkor O(X):=S; V(X,):= különben V(X,):=V(X,-) Cklus vége Cklus vége Eljárás vége. N ha és X ha X V X, ha X P és O ( X, ) O X P, V X, egyébként 26..27. 4:8 8/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 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ítható. Tehát a megoldás vsszavezethető a pénzváltás probléma megoldására. 26..27. 4:8 9/78

Dnamkus programozás Megoldás: V(X,): V:=X=P() vagy V P X, gaz és V X, > és V(X,-) vagy > és X P() és V(X-P(),-) Függvény vége. A megoldás: a legnagyobb olyan A kválasztása ( és E/2 között), amelyre V(A,N) gaz. x és X P és V X P, Probléma: a futás dő O(2 N ) 26..27. 4:8 2/78

Dnamkus programozás V(X,) 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ámolhatók. 26..27. 4:8 2/78

Dnamkus programozás Testvéres osztozkodás(a): V(..E,):=hams Ha P() E akkor V(P(),):=gaz Cklus =2-től N-g Cklus X=-től E-g V(X,):=X=P() vagy V(X,-) vagy X P() és V(X-P(),-) 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 26..27. 4:8 22/78

Dnamkus programozás Eredmény megadása(a,v,e,n): A:=E/2 Cklus amíg nem V(A,N) A:=A- Cklus vége Függvény vége. 26..27. 4:8 23/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ítható. Tehát a megoldás vsszavezethető a pénzváltás probléma megoldására. 26..27. 4:8 24/78

Dnamkus programozás Megoldás: Legyen V(X,Y,) gaz, ha az első ajándékból X és Y értékű s előállítható úgy, hogy mndegyk szám legfeljebb az egyk összegben szerepel! Legyen V(,,)=gaz mnden -re, V(X,Y,) hams mnden X,Y-ra! V(X,Y,)-re a következő rekurzív összefüggés írható fel > esetén: V X, Y, gaz V X, Y, P P X Y és és V V X X, Y P, Y, P, 26..27. 4:8 25/78

Dnamkus programozás Megoldás: Legyen V(X,Y,) gaz, ha az első ajándékból X és Y érték s előállítható úgy, hogy mndegyk legfeljebb az egyk összegben szerepel! Legyen V(,,)=gaz mnden -re, V(X,Y,) hams mnden X,Y-ra! V(X,Y,): Ha = akkor V:=hams különben ha X= és Y= akkor V:=gaz különben V:=V(X,Y,-) vagy P()X és V(X-P(),Y,-) vagy P()Y és V(X,Y-P(),-) Függvény vége. A megoldás: a legnagyobb olyan A kválasztása ( és E/2 között), amelyre V(A,A,N) gaz. 26..27. 4:8 26/78

Dnamkus programozás Igazságos osztozkodás(a): V(..E,..E,):=hams; V(,,):=gaz Ha P() E akkor V(P(),,):=gaz V(,P(),):=gaz Cklus =2-től N-g Cklus X=-től E-g Cklus Y=-től E-g V(X,Y,):=V(X,Y,-) vagy P()X és V(X-P(),Y,-) vagy P()Y és V(X,Y-P(),-) Cklus vége Cklus vége Eredmény megadása(a,v,e,n) Függvény vége. 26..27. 4:8 27/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- Cklus vége Függvény vége. 26..27. 4:8 28/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 pakolhatunk. Menny a maxmáls elszállítható érték? Megoldás: Tegyük fel, hogy H S S... S... optmáls megoldás, azaz F F... F 2 m maxmáls! 2 m Ekkor H S S S... S... s optmáls, azaz az m 2 m m adott részproblémának megoldása a megoldás megfelelő részlete. 26..27. 4:8 29/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 pakolhatunk. Menny a maxmáls elszállítható érték? Megoldás: Jelölje E(X,) a legnagyobb elszállítható értéket, amely az első tárgyból egy X kapactású hátzsákba bepakolható. E X, max E E F X, X,, F E X S, ha ha ha egyébként és és és S S S X X X 26..27. 4:8 3/78

Dnamkus programozás Hátzsák(): E(..S()-,):=; E(S()..H,):=F() Cklus =2-től N-g Cklus X=-tól H-g E(X,):=E(X,-) Ha S() X és E(X,)<E(X-S(),-)+F() akkor E(X,):=E(X-S(),-)+F() Cklus vége Cklus vége Kírás Eljárás vége. E X, max E E F X, X,, F E X S, ha ha ha egyébként és és és S S S X X X 26..27. 4:8 3/78

Dnamkus programozás Kírás: :=N; X:=H Cklus amíg E(X,)> Cklus amíg és E(X,)=E(X,-) :=- Cklus vége K:, X:=X-S(); :=- Cklus vége Eljárás vége. 26..27. 4:8 32/78

Dnamkus programozás stratégája A dnamkus programozás stratégája. 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. 26..27. 4:8 33/78

Dnamkus programozás stratégája 4. Részproblémák [optmáls] megoldásának kszámítása alulról-felfelé haladva: A részproblémák kszámítás sorrendjének meghatározása. Olyan sorba kell rakn a részproblémákat, hogy mnden p részprobléma mnden összetevője (ha van) előbb szerepeljen a felsorolásban, mnt p. A részproblémák kszámítása alulról-felfelé haladva, 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. 26..27. 4:8 34/78

Dnamkus programozás leghosszabb közös rész Feladat: Adjuk meg két sorozat X=(x,x 2, x n ) és Y=(y,y 2, y m ) leghosszabb közös részsorozatát! Egy sorozat akkor részsorozata egy másknak, ha abból elemek elhagyásával megkapható. Megoldás: Jelölje XX =(x,x 2, x ) az X, YY j =(y,y 2, y j ) pedg az Y sorozat egy-egy prefxét! Legyen Z=(z,z 2, z k ) egy megoldása a feladatnak! 26..27. 4:8 35/78

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- az XX n- és YY m- leghosszabb közös részsorozata. Ha x n y m, akkor Z az XX n- és Y vagy az X és YY m- leghosszabb közös részsorozata. Az XX és YY j leghosszabb közös részsorozatának hossza: h, j h, j max h, j, h, j ha ha egyébként x y j vagy j 26..27. 4:8 36/78

Dnamkus programozás leghosszabb közös rész A rekurzív algortmus: Hossz(,j): Ha = vagy j= akkor Hossz:= különben ha X()=Y(j) akkor Hossz:=Hossz(-,j-)+ különben Hossz:=max(Hossz(-,j),Hossz(,j-)) Függvény vége. h max, j h, j h, j, h, j ha ha egyébként x y j vagy j 26..27. 4:8 37/78

Dnamkus programozás leghosszabb közös rész A jó megoldás rekurzó memorzálással: Hossz(,j): Ha H(,j)=- akkor Ha = vagy j= akkor H(,j):= különben ha X()=Y(j) akkor H(,j):=Hossz(-,j-)+ különben H(,j):=max(Hossz(-,j),Hossz(,j-)) 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 - értékekkel töltjük k! h max, j h, j h, j, h, j ha ha egyébként x y j vagy j 26..27. 4:8 38/78

Dnamkus programozás toronyépítés Feladat: Adott M,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é haladva a méret és a súly s csökken. Megoldás: Tegyük fel, hogy M ; M ;...; M... megoldás! 2 k k Ekkor n= k- -re M ; M ;...; M... s megoldás, azaz 2 k k az adott részproblémának megoldása a megoldás megfelelő részlete. 26..27. 4:8 39/78

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 max Kocka Kocka M 2... M M ha ha egyébként M M M M 2 26..27. 4:8 4/78

Dnamkus programozás toronyépítés A rekurzív megoldás: Kocka(): K:=M() Cklus j=-től --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átható azonban, hogy Kocka() kszámításához csak a korábbakra van szükség. Kocka M ha M M Kocka 2 M ha M M Kocka max... M egyébként 26..27. 4:8 4/78 2

Dnamkus programozás toronyépítés Toronyépítés: Kocka():=M() Cklus =2-től N-g K:=M() Cklus j=-től --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. 26..27. 4:8 42/78

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+., méretű kockát, akkor a megoldás értéke Kocka(N+) 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. 26..27. 4:8 43/78

Dnamkus programozás toronyépítés Toronyépítés: Kocka():=M(); Mre():=; M(N+):= Cklus =2-től N+-g K:=M(); Mre():= Cklus j=-től --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. 26..27. 4:8 44/78

Dnamkus programozás toronyépítés Torony: Toronyépítés Toronykírás(N+) Eljárás vége. Toronykírás(): Ha Mre()> akkor Toronykírás(Mre()) K: Mre() Eljárás vége. 26..27. 4:8 45/78

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 ((,, ),, ( m- +,,N)) a megoldás! Ekkor az N. tárgy vagy önmagában kerül a kemencébe, vagy legfeljebb K- előző tárggyal együtt. 26..27. 4:8 46/78

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 ő Éget j max Éget j.. ahol j K 26..27. 4:8 47/78

Dnamkus programozás kemence Kemence: Idő():= Cklus =-től N-g H:=Idő(-)+Éget(); max:=éget(); G:= j:=- Cklus amíg j> és +j- K Ha max<éget(j) akkor max:=éget(j) Ha Idő(j-)+max<H akkor H:=Idő(j-)+max; G:=j j:=j- Cklus vége Idő():=H; Db():=-G+ Cklus vége Eljárás vége. Id ő mn Id ő Id ő Éget j max Éget j.. ahol j K 26..27. 4:8 48/78

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ő! 26..27. 4:8 49/78

Dnamkus programozás kemence Megoldás: Tegyük fel, hogy ((,, ),, ( m- +,,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 ő Éget j max Éget j.. ahol Súly j.. S 26..27. 4:8 5/78

Dnamkus programozás kemence Kemence: Idő():= Cklus =-től N-g H:=Idő(-)+Éget(); max:=éget(); G:= j:=-; 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-)+max<H akkor H:=Idő(j-)+max; G:=j j:=j- Cklus vége Idő():=H; Db():=-G+ Cklus vége Eljárás vége. Éget Id ő Id ő mn Id ő j max Éget j.. 26..27. 4:8 5/78 ahol Súly j.. S

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é haladva. A terep jobbra és lefelé lejt, azaz a jármű csak jobbra és lefelé haladhat. Add meg, hogy maxmum hány kncset gyűjthet be!! A megoldás elemzése: Ha a megoldás egy L, L 2,,L j,, L k úton érhető el, akkor az L, L 2,,L j egy olyan út, amn elért pontban az odág begyűjthető legtöbb kncset kapjuk. Kezdőpozícó: (,) Végpozícó: (N,M) 26..27. 4:8 52/78

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, j, Gy, j ha Kncs, j max Gy, j, Gy, j ha Kncs, j ha " " " " vagy j * * * * * * * * * 26..27. 4:8 53/78

Dnamkus programozás A megoldás: Gy(N,M) kncs Kncsek: Gy(,..M):=-; Gy(..N,):=- Cklus =-től N-g Cklus j=-től M-g Ha Kncs(,j)= * akkor k:= különben k:= Ha Gy(,j-)>Gy(-,j) akkor Gy(,j):=Gy(,j-)+k különben Gy(,j):=Gy(-,j)+k Cklus vége Cklus vége Eljárás vége. Gy max ha vagy, j max Gy, j, Gy, j ha Kncs, j Gy, j, Gy, j ha Kncs, j " " " " 26..27. 4:8 54/78 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 vagy j akkor Ha Gy(,j-)>Gy(-,j) akkor Útkírás(,j-); K: J különben Útkírás(-,j); K: L Eljárás vége. A megoldás a számítások után: Útkírás(N,M) 26..27. 4:8 55/78

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é haladhat. 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, L 2,,L j,, L k úton érhető el, akkor az L, 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ó: (,) Végpozícó: (N,M) 26..27. 4:8 56/78

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, ha lentről, lletve, ha fentről léptünk be! L, j max L, j, L, j, F, j ha Kncs, j max L, j, L, j, F, j ha Kncs, j ha " " " " vagy j F, j max F, j, L, j, F, j ha Kncs, j max F, j, L, j, F, j ha Kncs, j ha " " " " vagy j 26..27. 4:8 57/78

Dnamkus programozás kncs Kncsek: L(N+,..M):=-; L(..N,):=- F(,..M):=-; F(..N,):=- Cklus j=-től M-g Cklus =-től N-g Ha Kncs(,j)= * akkor k:= különben k:= F(,j):=max(F(-,j),L(,j-),F(,j-))+k Cklus vége Cklus =N-től -g --esével Ha Kncs(,j)= * akkor k:= különben k:= L(,j):=max(L(+,j),L(,j-),F(,j-))+k Cklus vége Cklus vége Eljárás vége. A megoldás: F(N,M) 26..27. 4:8 58/78

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é haladhat. 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, L 2,,L j,, L k úton érhető el, akkor az L, L 2,,L j egy olyan út, amn elért pontban az odág begyűjthető legtöbb kncset kapjuk. Kezdőpozícó: (,) Végpozícó: (N,M) 26..27. 4:8 59/78

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 Gy, j, Gy, j ha Kncs, j Gy, j, Gy, j ha Kncs, j ha ha Kncs, j " " " " " " vagy j * * * + + * * + * * * * + + + * 26..27. 4:8 6/78

Dnamkus programozás kncs Kncsek: Gy(,..M):=; Gy(..N,):= Cklus =-től N-g Cklus j=-től M-g Ha Kncs(,j)= * akkor k:= különben k:= Ha Kncs(,j)= + akkor Gy(,j):=-N*M különben ha Gy(,j-)>Gy(-,j) akkor Gy(,j):=Gy(,j-)+k különben Gy(,j):=Gy(-,j)+k Cklus vége Cklus vége Eljárás vége. A megoldás: Gy(N,M) 26..27. 4:8 6/78

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? 26..27. 4:8 62/78

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 mn, j M, j, j, M, j Probléma: a rekurzó nem hatékony! M ha ha ha j j j és és S S S S j j 26..27. 4:8 63/78

Dnamkus programozás Tükörszó Jó sorrendű táblázatktöltés kell:, j 26..27. 4:8 64/78

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--től -g --esével Ha S()=S(j) akkor M(,j):=M(+,j-) különben M(,j):=+Mn(M(+,j),M(,j-)) Cklus vége Cklus vége Tükörszó:=M(,N) Függvény vége. 26..27. 4:8 65/78

Dnamkus programozás Tükörszó Tükörszó(S,T): T():= Cklus j=2-től N-g T(j):=; Ment:= Cklus =j--től -g --esével Ment:=T() Ha S()=S(j) akkor T():=Ment különben T():=+Mn(T(),T(+)) Ment:=Ment Cklus vége Cklus vége Tükörszó:=T() Függvény vége. Mátrx (M) helyett vektor (T) használatával. 26..27. 4:8 66/78

Dnamkus programozás Tükörszó Tükörszó kírása: Ha Tükörszó(S,E) akkor :=; j:=n Cklus amíg <j Ha S()=S(j) akkor :=+; j:=j- különben Ha M(,j)=M(+,j) akkor {S() a j. betű mögé} különben {S(j) az. betű elé} Cklus vége Eljárás vége. 26..27. 4:8 67/78

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+ rúd vágássorozata s optmáls lesz. 26..27. 4:8 68/78

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 j, k Opt k, j k ha ha j j 26..27. 4:8 69/78

Dnamkus programozás rúd darabolás Kncsek: Cklus =-tól N-g Opt(,+):=; S(,+):= Cklus vége Cklus u=2-től N+-g Cklus =-töl N-u+-g j:=+u; Mn:=+ Cklus k=+-től j--g Ha Opt(,k)+Opt(k,j)<Mn akkor Mn:=Opt(,k)+Opt(k,j); Hol:=k Cklus vége Opt(,j):=Mn; S(,j):=Hol Cklus vége Cklus vége Eljárás vége. A megoldás: Opt(,N+) 26..27. 4:8 7/78

Dnamkus programozás stratégája A dnamkus programozás stratégája. 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. 26..27. 4:8 7/78

Dnamkus programozás stratégája 4. Részproblémák [optmáls] megoldásának kszámítása alulról-felfelé haladva: A részproblémák kszámítás sorrendjének meghatározása. Olyan sorba kell rakn a részproblémákat, hogy mnden p részprobléma mnden összetevője (ha van) előbb szerepeljen a felsorolásban, mnt p. A részproblémák kszámítása alulról-felfelé haladva, 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. 26..27. 4:8 72/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írható olyan karaktersorozattal, amely csak az A, C, G és T karaktereket tartalmazhatja. 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! 26..27. 4:8 73/78

Dnamkus programozás tovább feladatok LEFED Azt mondjuk, hogy egész számok zárt ntervallumanak egy H halmaza lefed az [,N] ntervallumot, ha az ntervallum mnden x eleméhez van olyan ntervallum H-ban, amelynek x eleme. Egy lefedés költségén a lefedéshez használt ntervallumok hosszanak összegét értjük. Számítsd k, hogy adott [,N] lefedendő ntervallum és lefedéshez használható ntervallumok egy H halmaza esetén mekkora a mnmáls lefedés költsége, ha létezk lefedés! 26..27. 4:8 74/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 haladó hatá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 határvonalra eső pxelek nem számítanak bele. Add meg a mnmáls lyen K értéket! 26..27. 4:8 75/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 ( M N), hogy a sorban első M csomag mndegyke felpakolható a két kamon valamelykére! 26..27. 4:8 76/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 pakolható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! 26..27. 4:8 77/78

Dnamkus programozás előadás vége