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

Hasonló dokumentumok
Algoritmusok és adatszerkezetek I. 10. előadás

Dinamikus programozás

Dinamikus programozá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

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

Fibonacci számok. Dinamikus programozással

4 2 lapultsági együttható =

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

Adatsorok jellegadó értékei

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.

Egy negyedrendű rekurzív sorozatcsaládról

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

Dinamukus programozás

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

Fuzzy rendszerek. A fuzzy halmaz és a fuzzy logika

/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

9. Visszavezetés egyedi felsorolókkal

Adatszerkezetek II. 10. előadás

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

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

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

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

Kombinatorikai algoritmusok

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!

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

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

Az entrópia statisztikus értelmezése

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

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:

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

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

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

Mohó algoritmusok. Példa:

Másolásra épülő algoritmusok

Egyszerű algoritmusok

Multihalmaz, intervallumhalmaz

The original laser distance meter. The original laser distance meter

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

Visszalépéses kiválogatás

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

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

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

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

Alkalmazott modul: Programozás

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

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

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

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


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

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

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

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

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

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

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

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

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

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

Programozási módszertan. Mohó algoritmusok

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

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

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

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

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

KÖZBESZERZÉSI ADATBÁZIS

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

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

Adatszerkezetek II. 6. előadás

Dinamikus programozás

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

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

Integrált rendszerek n é v; dátum

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

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

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

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

MATEMATIKAI STATISZTIKA KISFELADAT. Feladatlap

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

Algoritmusok, adatszerkezetek I.

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

Statisztikai. Statisztika Sportszervező BSc képzés (levelező tagozat) Témakörök. Statisztikai alapfogalmak. Statisztika fogalma. Statisztika fogalma

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?

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

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

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

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

14. melléklet a 44/2015. (XI. 2.) MvM rendelethez. Összegezés az ajánlatok elbírálásáról

Játék a szavakkal. Ismétléses nélküli kombináció: n különböző elem közül választunk ki k darabot úgy, hogy egy elemet csak egyszer

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 "

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

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 2015/2016 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

Átírás:

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