Dinamikus programozás

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

Dinamikus programozás

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

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

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

Fibonacci számok. Dinamikus programozással

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

Egy negyedrendű rekurzív sorozatcsaládról

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

4 2 lapultsági együttható =

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

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.

Dinamukus programozás

Adatsorok jellegadó értékei

Fuzzy rendszerek. A fuzzy halmaz és a fuzzy logika

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

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

9. Visszavezetés egyedi felsorolókkal

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

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

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

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

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

/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

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!

Az entrópia statisztikus értelmezése

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

Adatszerkezetek II. 10. előadás

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

Mohó algoritmusok. Példa:

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

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

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

Kombinatorikai algoritmusok

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

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.

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).

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

Másolásra épülő algoritmusok

Egyszerű algoritmusok

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

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

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

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

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

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

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Ó

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

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

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

KÖZBESZERZÉSI ADATBÁZIS

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

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

Dinamikus programozás

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

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

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

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

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

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

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

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

Programozási módszertan. Mohó algoritmusok

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

Support Vector Machines

Variancia-analízis (ANOVA) Mekkora a tévedés esélye? A tévedés esélye Miért nem csinálunk kétmintás t-próbákat?

Visszalépéses kiválogatás

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

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

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

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

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

IT jelű DC/DC kapcsolóüzemű tápegységcsalád

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

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?

Die Sensation in der Damenhygiene Hasznos információk a tamponokról

Adatszerkezetek II. 6. előadás

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

CRT Monitor gammakarakteriszikájának

Integrált rendszerek n é v; dátum

Alkalmazott modul: Programozás

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

MATEMATIKAI STATISZTIKA KISFELADAT. Feladatlap

Algoritmusok, adatszerkezetek I.

A mágneses tér energiája, állandó mágnesek, erőhatások, veszteségek

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

Dinamikus programozás vagy Oszd meg, és uralkodj!

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

Algoritmizálás, adatmodellezés tanítása 11. előadás. (Horváth Gyula előadása alapján)

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

Feladatsor 2012/13 2. félév a Programozási alapismeretek tárgyhoz

VALLALKQZÁSf SZERZ Ő DES ESPAN Nyugat-dunántúli Regionális Energia Stratégia és a három kistérség i energetikai koncepció kidolgozása tárgyban "

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Átírás:

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

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(X,) értékeket, ahol V(X,) gaz, az X összeg kfzethető az első pénzjeggyel!

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 x X, gaz 1 és V X, 1 1 és X P és V X P, 1

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

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ámoltók.

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 X=1-től F-g V(X,):=X=P() vagy V(X,-1) vagy X P() és V(X-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

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(0):=gaz Ha P(1) F akkor W(P(1)):=gaz Cklus =2-től N-g Cklus X=F-től 1-g -1-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

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(X,) a legutolsó olyan k ndex, amelyre gaz, hogy P k előfordul X felváltásában! Legyen V(X,)=N+1, X nem válttó fel az első pénzjeggyel!

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 X V és P X N X V X V X X és N X V 1 1, 1, 1, 0 0 0 0 1,

Dnamkus programozás Pénzváltás: A V mátrx kszámolása. V(1..F,0):=N+1; V(0,0):=0 Cklus =1-től N-g V(0,):=0 Cklus X=1-től F-g Ha V(X,-1) N akkor V(X,):=V(X,-1) különben X P() és V(X-P(),-1) N akkor V(X,):= különben V(X,):=N+1 Cklus vége Cklus vége V N 1 0 X, V X, 1 V X, 1 N 1 egyébként 0 X 0 X P N és és V X 0 X P, 1 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 0 nem lesz.

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

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

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 X és P X O X O P X és X O X X és N X O 0 1, 1,1, mn 0 1, 0 0 0 0 1,

Dnamkus programozás Pénzváltás(Mnmum): O(1..F,0):=N+1; O(0,0):=0 Cklus =1-től N-g O(0,):=0 Cklus X=1-től F-g Ha X<P() akkor O(X,):=O(X,-1) különben O(X,):=mn(O(X,-1), 1+O(X-P(),-1)) Cklus vége Cklus vége Eljárás vége. O X, mn O N 1 0 OX, 1 X, 1,1 OX P, 1 0 X 0 0 0 és és és X 0 X P X 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

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 X V P X O X O és P X X X és N X V 1, 1, 1 ), ( 0 0 0 0 1,

Dnamkus programozás Pénzváltá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 X=F-től 1-g -1-esével Ha X P() akkor S:=O(X-P())+1 különben S:=N+1 Ha S<O(X) akkor O(X):=S; V(X,):= különben V(X,):=V(X,-1) Cklus vége Cklus vége Eljárás vége. V X, V N 1 0 X, 1 egyébként 0 X 0 X P és és X 0 O( X, ) 1 O X 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.

Megoldás: V(X,): V:=X=P() vagy Dnamkus programozás V P x X, gaz 1 és V X, 1 >1 és V(X,-1) vagy >1 és X P() és V(X-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 X P és V X P, 1 Probléma: a futás dő O(2 N )

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ámoltók.

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 X=1-től E-g V(X,):=X=P() vagy V(X,-1) vagy X P() és V(X-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

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.

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.

Dnamkus programozás Megoldás: Legyen V(X,Y,) gaz, az első ajándékból X és Y értékű s előállíttó úgy, hogy mndegyk szám legfeljebb az egyk összegben szerepel! Legyen V(0,0,)=gaz mnden -re, V(X,Y,0) ms mnden X,Y-ra! V(X,Y,)-re a következő rekurzív összefüggés írtó fel >0 esetén: V X,Y, gaz V X,Y, 1 P P X Y és és V X P,Y, 1 V X,Y P, 1

Dnamkus programozás Megoldás: Legyen V(X,Y,) gaz, az első ajándékból X és Y érték s előállíttó úgy, hogy mndegyk legfeljebb az egyk összegben szerepel! Legyen V(0,0,)=gaz mnden -re, V(X,Y,0) ms mnden X,Y-ra! V(X,Y,): Ha =0 akkor V:=ms különben X=0 és Y=0 akkor V:=gaz különben V:=V(X,Y,-1) vagy P()X és V(X-P(),Y,-1) vagy P()Y és V(X,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.

Dnamkus programozás Igazságos osztozkodás(a): V(1..E,1..E,1):=ms; V(0,0,1):=gaz Ha P(1) E akkor V(P(1),0,1):=gaz V(0,P(1),1):=gaz Cklus =2-től N-g Cklus X=1-től E-g Cklus Y=1-től E-g V(X,Y,):=V(X,Y,-1) vagy P()X és V(X-P(),Y,-1) vagy P()Y és V(X,Y-P(),-1) Cklus vége Cklus vége Eredmény megadása(a,v,e,n) Függvény vége.

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.

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

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(X,) a legnagyobb elszállíttó értéket, amely az első tárgyból egy X kapactású hátzsákba bepakoltó. E X, max E F 0 EX, 1 X, 1, F EX S, 1 1 egyébként 1 1 1 és és és S S S 1 1 X X X

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 X=0-tól H-g E(X,):=E(X,-1) Ha S() X és E(X,)<E(X-S(),-1)+F() akkor E(X,):=E(X-S(),-1)+F() Cklus vége Cklus vége Kírás Eljárás vége. E X, max E F 1 0 EX, 1 X, 1, F EX S, 1 egyébként 1 1 1 és és és S S S 1 1 X X X

Dnamkus programozás Kírás: :=N; X:=H Cklus amíg E(X,)>0 Cklus amíg 1 és E(X,)=E(X,-1) :=-1 Cklus vége K:, X:=X-S(); :=-1 Cklus vége Eljárás vége.

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.

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.

Dnamkus programozás leghosszabb közös rész Feladat: Adjuk meg két sorozat X=(x 1,x 2, x n ) és Y=(y 1,y 2, y m ) leghosszabb közös részsorozatát! Egy akkor részsorozata egy másknak, abból elemek elgyásával megkaptó. Megoldás: Jelölje XX =(x 1,x 2, x ) az X, 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!

Dnamkus programozás leghosszabb közös rész A megoldás elemzése: Ha x m =y m, akkor z k =x m =y m, és ZZ k-1 az XX n-1 és YY m-1 leghosszabb közös részsorozata. Ha x m y m, akkor Z az XX n-1 és Y vagy az X és YY m-1 leghosszabb közös részsorozata. Az XX é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 0 egyébként x 0 y j vagy j 0

Dnamkus programozás leghosszabb közös rész A rekurzív algortmus: Hossz(,j): Ha =0 vagy j=0 akkor Hossz:=0 különben X()=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 0 egyébként x 0 y j vagy j 0

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 =0 vagy j=0 akkor H(,j):=0 különben X()=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 0 egyébként x 0 y j vagy j 0

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.

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

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. Kocka 1 2 Kocka M Kocka M max... M egyébként 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.

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., 0 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.

Dnamkus programozás toronyépítés Toronyépítés: Kocka(1):=M(1); Mre(1):=0; M(N+1):=0 Cklus =2-től N+1-g K:=M(); Mre():=0 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.

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()>0 akkor Toronykírás(Mre()) K: Mre() Eljárás vége.

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.

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

Dnamkus programozás kemence Kemence: Idő(0):=0 Cklus =1-től N-g H:=Idő(-1)+Éget(); max:=éget(); G:= j:=-1 Cklus amíg j>0 é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

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ő!

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

Dnamkus programozás kemence Kemence: Idő(0):=0 Cklus =1-től N-g H:=Idő(-1)+Éget(); max:=éget(); G:= j:=-1; Su:=Súly() Cklus amíg j>0 é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.. 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é 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)

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, j 1 Kncs, j max Gy 1, j, Gy, j 1 1 Kncs, j 0 * * * * * * * * * 0 "" " " vagy j 0

Dnamkus programozás A megoldás: Gy(N,M) kncs Kncsek: Gy(0,1..M):=0; Gy(1..N,0):=0 Cklus =1-től N-g Cklus j=1-től M-g Ha Kncs(,j)= * akkor k:=1 különben k:=0 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, j 1 Kncs, j max Gy 1, j, Gy, j 1 1 Kncs, j 0 0 "" " " vagy j 0

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)

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)

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 F, 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 0 0, 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 0 0 "" " " "" " " vagy vagy j 0 j 0

Dnamkus programozás kncs Kncsek: L(N+1,1..M):=0; L(1..N,0):=0 F(0,1..M):=0; F(1..N,0):=0 Cklus =1-től N-g Cklus j=1-től M-g Ha Kncs(,j)= * akkor k:=1 különben k:=0 L(,j):=max(L(+1,j),L(,j-1),F(,j-1))+k F(,j):=max(F(-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)

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)

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 0 N M Kncs, j Gy 1, j, Gy, j 1 Kncs, j Gy 1, j, Gy, j 1 1 Kncs, j 0 " " "" " " vagy j 0 * * * + + * * + * * * * + + + *

Dnamkus programozás kncs Kncsek: Gy(0,1..M):=0; Gy(1..N,0):=0 Cklus =1-től N-g Cklus j=1-től M-g Ha Kncs(,j)= * akkor k:=1 különben k:=0 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)

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 feladat-nak kell legyen megoldása! Alternatív feladat: mnmálsan hány betűt kell töröln?

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! 0 j j j és és S S S S j j

Dnamkus programozás Tükörszó Jó sorrendű táblázatktöltés kell: 1, j 1

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),T(,j-1)) Cklus vége Cklus vége Tükörszó:=M(1,N) Függvény vége.

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. Mátrx helyett vektor sználatával.

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.

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 0..V k és a V k..v n+1 rúd vágássorozata s optmáls lesz.

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 0 j1,k Opt k, j k1 j 1 1 j

Dnamkus programozás rúd darabolás Kncsek: Cklus =0-tól N-g Opt(,+1):=0; S(,+1):=0 Cklus vége Cklus u=2-től N+1-g Cklus =0-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):=Mn; S(,j):=Hol Cklus vége Cklus vége Eljárás vége. A megoldás: Opt(0,N+1)

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.

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.

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!

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!

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!

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!

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!

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