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

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

VÉLETLENÍTETT ALGORITMUSOK. 1.ea.

(A TÁMOP /2/A/KMR számú projekt keretében írt egyetemi jegyzetrészlet):

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

Mohó algoritmusok. Példa:

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

Neumann János Tehetséggondozó Program Gráfalgoritmusok II.

3. SOROZATOK. ( n N) a n+1 < a n. Egy sorozatot (szigorúan) monotonnak mondunk, ha (szigorúan) monoton növekvő vagy csökkenő.

ALGEBRA. egyenlet megoldásait, ha tudjuk, hogy egész számok, továbbá p + q = 198.

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

Matematika I. 9. előadás

Kétoldali hibás Monte Carlo algoritmus: mindkét válasz esetén hibázhat az algoritmus, de adott alsó korlát a hibázás valószínűségére.

A függvénysorozatok olyanok, mint a valós számsorozatok, csak éppen a tagjai nem valós számok,

ű ú Í Ó Á ú Ű ű Ő Ö Á ú Ű Ü ú ú Á ú ű

ú Ü Í ú ú ú ú ú ú

ú ű ú ú ű ú ű ű ú ű ú ű Á ű ű Á ű ű ú ú ú ú ú ú ű ú ú ú ú ú ú ú ú

Ö Ö Ú Ó Ö ű Ő Ő ű ű Ü Ő Ó Ő

ő ő ő ő ú É ü ú ú ű ú ű ő ő ő ő Á Á ü ő É É É É É É Á Ú Á Á ő ő ő ő ő É Á Á Á ő ő ő Á ü ő ő ü

ú ú ö ö ü ü ü ü ű ü ü

ú ú ü ü Á ú ú ü ű ű ú ü ü ü ü

é ú é é é é é é é é é é é é ú é ö é é é ö Ő é é é ú é é é é é é é é ö é é é ö é Ö é é ö é ö é é é ű é ö ö é ö é é ö ö é é ö ö é ö é Ö é ú é é é é é é

ő ö ő ú ő ö ö ő ó ő ö ü ú ö ö ó ő ö ü ó ó ó ó ő ő ő ó ó ú ő ü ő ö ö ó ü ö ö ő ű ö ö ő ú ú ó ö ő ű ö ó

Ö Ö ű ű ű Ú Ú ű ű ű Ú ű

É Ö Á Í Á Ó Ö ü

ö ö ö ö ö ö ö ü ö ü ö ű ö ú ü ű ö ü Í ö ú ü ü ű ö ú ü Á ü

ü ö ú ö ú ü ö ü Á Ó ö ö ö ö ú ü ú ü ü ú ú ö ö ü ü ú ü ü ö ö ű ö ü ü ü ü ö ö

É ö Ű ő ű ő ő ű ű

Ü

Í Í Í Ü Ó Ó Ö Á Ü Ü Ó Ü Ü Ó Ö Í É Ö

É Í Á Á É Ü Ó É É É É Í Ó Ó Ő Á Á É Á É É É É Á É É Á Á É É Á É Í

Í Ú É ő ő ú ö Ö ú ú ú ö ö ú ö ö ű ö ő ö ö ú ö ő ő ö ö ö ő ő ú ő ú ö ö ö ú ö ö ú ő ö ú ö ű ö ő Ó ő Á ö ő ö ö

ó ú ú ü ú ő ó ő ő ó ó ó ö ó ü ő ó ő ö ü ü ó ö ő É ó ö ö ö ó ó ö ü ü ö ü ó ó ő ó ü ó ü ü ö ö É ú ó ó ö ú ö ü ü ó ó ó ü Á ö ö ü ó ö ó ö ö ö ö ó ó ö ó ó

É ő ő ű ú Á ő Á ő ű ő ő ő ő ő ő ő ő ű ú ű ű ő ő ő ű

é ö é Ö é é ő í ó í é ő ö ú é ó é ő ü ü é ó ö é é ó é é ö é ő í é é ő é é ö é ű ö é í ó é é í ö í ó í ó é é ö ó í ó ó í ó é é ö ő í ó ó í ó ü é í ü

í Ó ó ó í ó ó ó ő í ó ó ó ó

ö ö ó ú ö ö ú ü ó ö ö Í ö ö ö ü ó ö ö ú ú ö ü ó ü ó ü ö ú ü ó ü ö ó Á Á ö ü ú ó ö ü ü ö ó ü ü Á ü ö ü ö ü ö ö ö ü ö ú ö ö ö ü ú ö ú ö ű ú ú ü ö ó ö ö

ó É ó í ó ó í í ö í ó í ö ö ö ü ö ó ó ó ü ú ö ü ó ó ö ö ü ü ü ö ö ó ö í ó ű Ü ó í ú í ö í ö í Í ó ó í í ö ü ö ö í ö í ö ö ö ü ó í ö ö ó í ú ü ó ö

í ó ő í é ö ő é í ó é é ó é í é é í é í íí é é é í é ö é ő é ó ő ő é ö é Ö ü é ó ö ü ö ö é é é ő í ő í ő ö é ő ú é ö é é é í é é í é é ü é é ö é ó í é

É Í ü ú É ü ő ő ő ő ú ő ú ü ü ő ü ú ü ű ú ú ü ü Í ü ű ő ő É ő

ő ő ő ő ő ő ú ő ü Á ü ü ő ő ő ő ő ő ő ő ő ő Ö Ó ő ő ő Ö ő ő ő

ü É ö É É ö ö ö ü ö ö Á ű ö ű ű ű Á Í ö ö Ó ö

ő ö ő ű ó ö ó ű Í Ö Ö Á Í Ó Ö Ü É Ö Ö Ö Á Á Ö É Á Ö

ö ő ő ü ü Ó ü ö ű Á ő ő ö ő Á Ó ű ö ü ő ő ű

ű í ú ü ü ü ü ü Ó í ü í í í É Á

É ú É ö ö ű ö ö ö ú ú ú ű ű ú ö ű ö ű ű ü ö ö ü ű ö ü ö ö ö ö ú ü ö ö ö ú ö ö ú ö ö ú ü ú ú ú ű ü ö ö ű ú ű ű ü ö ű ö ö ö ű ú ö ö ü ú ü ö ö ö ü ú ö ű

Í Í Ó ű Ü Ó Ó Ü ü Ö Í Ü Í Í ú Ö Ó Í ú ú Ö Ó É Í ű ú

Ö Ö ú

ő ő Ű ü ú ú Ú ü ű ő ő ő ő Á Á Í ü É ő ő ő ő ő É ő ú ú ú ő Á Ö ő

ú ü ü ú Ö ú ü ü ü ü ü ú ü ú ü ű Í ü ü ű ü ű Ó ü Ü ű ú ú Á ü ű ű ü ü Ö ü ű ü Í ü ü

Ü ű ö Á Ü ü ö ö

ö ö Ö ó ó ö ó ó ó ü ö í ü ú ó ó í ö ö ö ó ö ü ú ó ü ö ü ö ö Ö ü ö ö Ö ó


Ü ü Ü Ö Ó ö ü ö Ó Ú Ó ü Ó ö ö Á ö ö ö ö ü

Í ö ö ű ú ö ö Í ö ü ö ü

Í Ó ü ü í ü ü ü í Í í É í í Í Í ü ü ü í Í ü

í í É í ó ó É ö í ó í ó í ó ó í ó í í ó ó ó í ö ö ö ö í í í ó ó ö ó

ű ú ú Ö ó Ö ó ó ó Ö ű ó ű ű ü Á ó ó ó ó ü ó ü Ö ó ó ó Ö ű ű ü Ö ű Á ú ú ú ó ű í í Ő ú Á É Ö í ó ü ű í ó ű ó Ö ú Ő ú ó í ú ó

Adatszerkezetek II. 6. előadás

ö Ó ű ö ó í ó ü ö Ó ó í ö ö ó Ö ó ö í ó í ó Á í ó Á Á Ő ú ü ó Í ü ú ü

ö ü ü ú ó í ó ü ú ö ó ű ö ó ö í ó ö í ö ű ö ó Ú ú ö ü É ó í ö Ó Á í ó í í Ú ö ú ö ű ü ó

Ö ő ü Ö Ö Ő ü ő Ö Ö ü ű Á Í Ö ű ü ő ő ő Ö ü ü ő ő ő Ü ü ő ő ő ü ő ő ü ü

Ö Ö Ö Ö Ö Á Ű É Ö Ö Ö

ú ű ű É ü ű ü ű ű í ü í ő í Ü ő ő ü ú Í ő ő í ú ü ü ő ü

í ó í ó ó ó í í ü ú í ú ó ó ü ü í ó ü ú ó ü í í ü ü ü ó í ü í ü ü í ü ü í ó ó ó í ó í ü ó í Á

ű Á ü ő ö í ö ö ő ő ő ő ö

Ö Ö ö Ó Ó Ó Ó Ü ú ü Ű Ö Ö Ö ö Ü ö Í ü ű

í ü í ü ő ő ü Í ő ő ő ú í ő ő ö ö ö ű ü í ő ő í ú ö ö ú ő ő ú í ő í ő ö ö í ő ü ü í ő ö ü ü ú í í ü ő í ü Í í í í ö ő ö ü ő í ő ő ü ű ő ő í ő í í ő ő

ö ö ö Ö ö ú Ö í Ö ű ö í Ö í ö ü ö í ú Ö Ö ö í ű ö ö í ö ö Ő ö í ü ö ö í Ö ö ö í ö í Ő í ű ű í Ö Ó í ö ö ö ö Ö Ö ö í ü ö ö Ö í ü Ö ö í ö ö ö ö ö Ö ö í

í í ü í í í í í Ó ő ő í í í Ú ü Ú í í Ú ő ü Ú ü ő

ü ö ö ő ü ó ó ú ó

ü ő ő ü ü ő ő ű í í ű ő ő ő ü ő ő í í ő ő ő ő ő ő ü ü í ő Ö ő ü í ő ü í í ő ü ő í ő ő í í ő ü ü í ő ü í ő í ő í ő ü í ő í ü í í ő

ű ú ü ü ü Í ü ö ü ö ü ö ü Ó ü ö ü ö ö ü ű ű ú ü ö ö ü Ó ö ű ü ö ú ö ö ü ü ű ü ü ö ö ü ü ú ö ö ü ü ú ü

í í í í ó í ó ö ö í ű ü ó ó ü ú Á Á ó ó ó ó ó ó í ó ö ö ü Ó ö ü í ö ó ö í í ö í ó ó í ö í ú ó ú í ö ú ö ö ö í ó ó ó ú ó ü ó ö í ó ó í í í Á í ó ó ó

ó ö í í ü Ű Ö ó ó ű ö ü Í í í ö Ö Ó ö Ű Ö ú ó ó í í ű ö ö ö ö í ó ö ö í ö ű ö ű ö ö ö ö ö í ó Ö Ö ü ú ö ó ü ö Ö ű ö Ö ü ó ö ö ó ö ö Ó í ű ö ű ö ö ű í

ű ö ú ö ö ö ö í ű ö ö ö ű ö ö ö í ü ú í ű í ö í ú ű í ü ö ö ú ö í ö ű ú ü ö ö í ö ü ö ú ű ö ö ö í Á í ü í ö ü ö í ü ö Ő ü ö í ű ü ö í í í í í

ű ú ó ó ü í Á Á ú ó ó ó ó ó ó ó ó ó ó ó ó ó ó í ó ü É ű ü ó í ü í í í í í ó í ü í í ó ó Á

VII. A határozatlan esetek kiküszöbölése

Kalkulus I. Első zárthelyi dolgozat szeptember 16. MINTA. és q = k 2. k 2. = k 1l 2 k 2 l 1. l 1 l n 6n + 8

Gyakorló feladatok II.

2. Hatványsorok. A végtelen soroknál tanultuk, hogy az. végtelen sort adja: 1 + x + x x n +...

Debreceni Egyetem, Közgazdaság- és Gazdaságtudományi Kar. Feladatok a Gazdasági matematika I. tárgy gyakorlataihoz. Halmazelmélet

Bevezető analízis II. példatár

SZÁMELMÉLET. Vasile Berinde, Filippo Spagnolo

Informatikai tehetséggondozás:

Eötvös Loránd Tudományegyetem Informatikai Kar. Analízis 1. Írásbeli beugró kérdések. Készítette: Szántó Ádám Tavaszi félév

Matematika B4 I. gyakorlat

1. Adatok közelítése. Bevezetés. 1-1 A közelítő függvény

Számsorozatok. 1. Alapfeladatok december 22. sorozat határértékét, ha. 1. Feladat: Határozzuk meg az a n = 3n2 + 7n 5n létezik.

10.M ALGEBRA < <

FELADATOK A KALKULUS C. TÁRGYHOZ

ő ű í ő ú í í Á ű í ő ő ő ő í É í í ő Ö Ö Ö Á Í Á ő ő ő ő É ő ő ú ú ú í ő Á Ö ő ő

Í Á ő é é é é é ő é ő é ő é Í Á Ú Á Á é ő é ő é é é é é ű é é é é é é é é Á é é é é é ú ú é é é é é é é ú é é é é é é é é é é é ő é é é é é é é é ű é

í ű í í í ű ö ü ü ö ú ű ú ö ö í í í ű ö ü ü ö ö ö ö í í í ű ö ü ü ö ü ö í í í ű í ö í ö ö ű í ü ü ö í ö ö ö ü í í ű í ú ö ö ö ü ö ö ú ö ö ö ü ö ö ö ö

ú ü ú ö ú í ü í ű ö ü ü ú ú ö ú ö íö í ú ü

Ú ú ö é ö é Ú ú ö ű ö ö ű ö é ö ö é í í Ö ö í í Á Á Ó é ű ü é é ü ú é ü é ű ü é

Á Ó É É Ú É ő í ő ő ö ő ö ő í ö ö ü í ő í ő ö ű ő í ü ü ő í ö ő ü ő ú ü í í ű ü ő ő ő í ö í ú ö ő ö ü ő ő ő É

Á ú ú ű ű ú ú Í ú ú Ö ű Ö ű Ö Ö ű ű ú ÍÍ Í ú Í Í Í Í Í ú ú

Á ó ó ö ó ó ó ö ó ó ö ü ö ó ü ö ó ü ó ö ó ü ó űö ú ü ö ú ó ó ó ő ü ö ö ó ö ó ó ó ó ö ó ő ú ü ö ó ö Ú ü ó ü ő ö ü ö ö ó ó ü ő ő ó ő ü ó ó ó ö ű ő ő ű ü

ó ú ó ó ó ó ó ó ó ó ó ó ü ó ü ö ü ó Á Á Ő ű ü ó ó ó Í ó ü ú ü Á Á ű ö ó ó ó ó ö ü

ö ű é é é é é é ü é é é é ű é é ü é é é é é ó ó é Í é í é é é é ó ö é ö ö ö ó é é í é é é é Ő é é é ü ü é é é ö ö ö é ü é é í é ó ü é é ü é ó é ó ó é

Átírás:

Algoritmizálás Horváth Gyula Szegedi Tudomáyegyetem Természettudomáyi és Iformatikai Kar horvath@if.u-szeged.hu. Mohó algoritmusok A mohó stratégia elemi 1. Fogalmazzuk meg az optimalizációs feladatot úgy, hogy választások sorozatával építjük fel a megoldást. 2. Mutassuk meg, hogy midig va olya megoldása az eredeti feladatak, amely a mohó választással kezdődik. Ezt mohó választási tulajdoságak evezzük. 3. Bizoyítsuk be, hogy a mohó választással olya redukált problémát kapuk, amelyek optimális megoldásához hozzávéve a mohó választást, az eredeti probléma megoldását kapjuk. Ezt optimális részprobléma tulajdoságak evezzük. Általába sokféle mohó választás kíálkozik, de em midegyik mohó választás eredméyez optimális megoldást, ezért fotos, hogy bebizoyítsuk, hogy az adott mohó választás téyleg optimumot eredméyez..1. Feladat: Féykép probléma Egy redezvéyre vedéget hívtak meg. Mide vedég előre jelezte, hogy mettől meddig lesz jele. A szervezők féyképeke akarják megörökítei a redezvéye résztvevőket. Azt tervezik, hogy kiválasztaak k időpotot és mide kiválasztott időpotba az akkor éppe jelelevőkről csoportképet készíteek. Az a céljuk, hogy a lehető legkevesebb képet kellje készítei, de mideki rajta legye legalább egy képe. Írjuk olya programot, amely kiszámítja, hogy legkevesebb háy féyképet kell készítei, és megadja azokat az időpotokat is amikor csoportképet kell készítei! Bemeet A feykep.be szöveges állomáy első sorába a vedégek száma va (1 3000). A következő sor midegyike két egész számot tartalmaz egy szóközzel elválasztva, egy vedég e érkezési és t távozási időpotját (1 e < t 1000). Ha egy féyképet az x időpotba készítik és e x < t, akkor azo a féyképe rajta lesz az e időbe érkező és t időbe távozó vedég. Kimeet A feykep.ki szöveges állomáy első sorába a készítedő féyképek k számát kell íri! A második sor potosa k egész számot tartalmazzo egy-egy szóközzel elválasztva, azo időpotokat (tetszőleges sorredbe), amikor a csoportképeket készítei kell. Példa bemeet és kimeet bemeet 6 2 4 1 4 2 7 7 13 10 3 9 kimeet 2 3 9 1

Megoldás Tehát a bemeet itervallumok egy halmaza, a kimeet pedig olya miimális elemszámú I = {[e 1,t 1 ),...,[e, t )} M = { f 1,..., f k } számhalmaz, hogy mide i-re i = 1,..., va olya f M, hogy e i f < t i. Vegyük észre, hogy ha két itervallum jobb-végpotja megegyezik, t i = t j akkor amelyik bal-végpotja kisebb,e i < e j az elhagyható, hisze ha f [e j,t j ), akkor f [e i,t i ). A megoldás elemzése. Tegyük fel, hogy az itervallumok jobb-végpotjuk szerit övekvőe redezettek, tehát t i < t i+1, i = 1,..., 1 és az M megoldáshalmazra f 1 <... < f k. Mohó választás. Válasszuk a megoldáshalmaz első eleméek t 1 1-et. Megmutatjuk, hogy az optimális megoldásba f 1 helyett állhat a mohó választás, tehát t 1 1. Először is f 1 < t 1, mert külöbe az 1. itervallumba em ese egy potja sem az optimális megoldásak. Továbbá, mide olya itervallum, amelybe bee va f 1, bee va t 1 1 is, hisze ha e i f 1 < t i. Redukált részprobléma. f 1 t 1 1 1. ábra. Mohó választás és probléma redukálás. Töröljük I-ből mida olya itervallumot, amelybe bee va a t 1 1 mohó választás: I = I {[e i,t i ) : e i < t 1 }. Az M = { f 2,..., f k } pothalmaz megoldása lesz az I problémáak. I optimális is, mert ha lee kevesebb potot tartalmazó megoldása I -ek, akkor hozzávéve t 1 1-et, vagy f 1 -et, a kiidulási I probléma kisebb elemszámú megoldását kapák, mit M. Megvalósítás 1 Program Feykep ; 2 (Λ Bemeet : Itervallumok { [ e1, t1 ],..., [ e, t ] } halmaza. 3 Kimeet : Legkevesebb elemszámú o l y a M halmaz, hogy mide 4 itervallumba e s i k M ek l e g a l á b b egy eleme. Λ) c o s t 6 MaxN=3000; { az itervallumok max. száma } 7 MiE=1; 8 MaxT=1000; 9 var 10 N :Word; { az itervallumok száma } 11 I t : array [ 1.. MaxT] of Word; { az itervallumok : [ I t [ t ], t ), ha I t [ t ] >0 } 12 k : Word; { a megoldás elemszáma } 13 M: array [ 1.. MaxN] of Word; { a megoldás halmaz } 14 i, x : I t e g e r ; 1 Utolso : I t e g e r ; 16 Procedure Beolvas ; 17 { Global :N, I t } 18 var 19 Bef : Text ; 20 i, e, t :Word; 2

21 begi 22 f o r i :=1 to MaxT do I t [ i ] : = 0 ; 23 Assig ( Bef, feykep. be ) ; Reset ( Bef ) ; 24 ReadL ( Bef,N) ; 2 f o r i :=1 to N do begi 26 ReadL ( Bef, e, t ) ; 27 i f e> I t [ t ] the I t [ t ] : = e ; 28 ed ; 29 Close ( Bef ) ; 30 ed { Beolvas } ; 31 Procedure KiIr ; 32 { Global : k, M } 33 var 34 Kif : Text ; 3 i :Word; 36 begi 37 Assig ( KiF, feykep. ki ) ; Rewrite ( KiF ) ; 38 WriteL ( Kif,K) ; 39 40 f o r i :=1 to k do 41 Write ( Kif,M[ i ], ) ; 42 43 WriteL ( Kif ) ; 44 4 Close ( KiF ) ; 46 ed { KiIr } ; 47 begi { Program } 48 Beolvas ; 49 0 Utolso : = 0 ; { az u t o l s ó b e v á l a s z t o t t pot } 1 k : = 0 ; { a b e v a l á s z t o t t potok száma } 2 f o r x :=1 to MaxT do 3 i f ( I t [ x ] >0) ad ( Utolso < I t [ x ] ) the begi 4 Utolso := x 1; Ic ( k ) ; 6 M[ k ] : = U t o l s o ; 7 ed ; 8 { f o r i } ; 9 60 KiIr ; 61 ed..2. Feladat: Egységyi végrehajtású mukák ütemezése Mekk Elek ezermester épszerű vállalkozó, soka keresik fel megredelésekkel. Mide mukája potosa egy apig tart és egyszerre csak egy muká tud dolgozi. Mide megredelés határidős, és amit elvállal, azt határidőre el kell végezie. Mide elvégzett muka utá meghatározott haszo jár. A mester a következő évre beérkezett megredelések közül ki akar választai egy olya részhalmazt, amely a lehető legtöbb haszot eredméyezi. Készítsük programot a következő évi megredelések egy lehető legagyobb elemszámú részhalmazáak a kiválasztására és ütemezésére aak érdekébe, hogy a mester a kiválasztott mukákat határidőre el tudja végezi, és az összhaszo a lehető legagyobb legye. A programak egy ilye ütemezést kell eredméyül adia. Bemeet Az utemez.be állomáy első sora a megredelések számát (1 10000) tartalmazza. A következő sor midegyikébe két pozitív egész szám va egy-egy szóközzel elválasztva, az adott megredelés h határideje (1 h 36), és a muka utá járó 3

p haszo. Tehát az i-edik mukát az állomáy i + 1-edik sora írja le. Kimeet Az utemez.ki állomáy első sorába a kiválasztott mukák k száma legye. A következő k sor midegyikébe két számot kell íri egy-egy szóközzel elválasztva. Az első szám a kiválasztott muka száma legye, a második pedig aak a apak a sorszáma, amelyike az adott mukát el kell végezi. Ha több megoldás is va, közülük egy tetszőlegeset kell kiíri az állomáyba! Példa bemeet és kimeet bemeet 6 3 7 2 4 7 2 4 6 2 4 1 3 kimeet 1 1 3 2 2 4 4 3 7 Megoldás Próbáljuk meg a megoldást olya formába megfogalmazi, hogy lépésekét választást végzük, mide lépésbe egy mukát ütemezük be egy olya apra, amely a választott muka határidejéél em agyobb. A választást befolyásolja, hogy melyek a még szabad apok és milye mukákat em választottuk még. Legye S a még szabad apok halmaza és M a még beosztásra váró mukák halmaza. Tehát egy ütemezési (rész)probléma az (S,M) párral adható meg általáosa. Megoldás elemzése..1. lemma. Legye M {1,...,} a mukákak egy részhalmaza. Az M-beli mukákak akkor és csak akkor va határidőt em sértő beosztása, ha M elemeiek határidő szerit emcsökkeő felsorolása határidőt em sértő. Bizoyítás. Ha az M-beli mukákak va határidőt em sértő beosztása, akkor va olya is, amikor a beosztás folyamatos, tehát a beosztás megadható M elemeiek egy felsorolásával. M elemeiek egy m 1,...,m k felsorolása akkor határidőt em sértő, ha mide i-re, i = 1,...,k teljesül az i h mi egyelőtleség. Ha a felsorolásra em teljesül, hogy határidő szerit emcsökkeő, akkor va olya i idex, hogy h mi > h mi+1. A i-edik és i + 1-edik mukát megcserélve továbbra is határidőt em sértő beosztást kapuk, mert i < i + 1 h mi+1 < h mi. Fordítva yilvávaló. Mohó választási tulajdoság. Válasszuk a legagyobb haszú mukát. Ha va olya szabad ap, amely em agyobb, mit a muka határideje, akkor üte- 2. ábra. mezzük be a mukát a legagyobb ilye szabad apra. Ha ics ilye ap, akkor a mukát csak töröljük a beosztadó mukák halmazából. Bebizoyítjuk, hogy bármely (S, M) részprobléma eseté va olya optimális megoldás, amely tartalmazza a mohó választást. Legye {(m 1,d 1 ),...,(m k,d k )} egy optimális megoldása az (S,M) részproblémáak. Tehát az m i muka a d i apra va ütemezve, így d i H[m i ], és a d i értékek párokét külöbözőek. Feltehetjük, hogy a mukák haszuk szerit emövekvőe vaak felsorolva, azaz P[m 1 ] P[m 2 ] P[m k ]. Legye m a mohó választás, azaz m a legagyobb haszú muka, amelyre d a legagyobb olya ap, amely még szabad és d H[m ]. Tehát P[m ] P[m i ],(i = 1,...,k). Ha az optimális megoldásba valamelyik muka a d apra va beosztva, azaz d = d i, akkor m i helyettesíthető m -al, úgy, hogy az összhaszo em csökke, mivel P[m ] P[m i ]. Ha em lee egyetle muka sem beosztva a d apra, akkor m hozzá-vételével jobb megoldást kapák, mit az optimális, ami elletmodás. Tehát feltehető, hogy az optimális megoldásba m 1 a mohó választás és d 1 = d. 4

Optimális részproblémák tulajdoság. Legye (m,d ) mohó választása az (S,M) részproblémáak. Ekkor a mohó választás eredméyekét az (S,M ) részprobléma keletkezik, ahol S = S {d }, és M = M {m }. Azt kell megmutati, hogy (S,M ) egy optimális megoldásához hozzávéve a mohó választást, az eredeti (S,M) probléma egy optimális megoldását kapjuk. Az yilvávaló, hogy az (m 2,d 2 ),...,(m k,d k ) beosztás egy (em feltétleül optimális) megoldása az (S,M ) problémáak. Tehát (S,M ) optimális megoldásához tartozó összhaszo legalább k i=2 P[m i]. Ha (S,M ) optimális megoldása eél több összhaszot eredméyeze, akkor a mohó választás hozzá-vételével az eredeti (S,M) probléma jobb megoldását kapák, mit az optimális. Ezzel bebizoyítottuk, hogy (S,M ) egy optimális megoldásához hozzávéve a mohó választást, az eredeti (S,M) probléma egy optimális megoldását kapjuk. Megvalósítás. 1 { G l o b a l i s programelemek az EgyUtemez e l j a r a s h o z : 2 c o s t 3 MaxN =??? ; { a mukák max. száma } 4 MaxH =??? ; { a max. h a t á r i d ő } type 6 Idex = 1.. MaxN; 7 Hatarido = array [ Idex ] Of I t e g e r ; 8 B e o s z t a s = array [ 1.. MaxN] Of 0.. MaxH; 9 Haszo = array [ Idex ] Of Word; 10 } 11 procedure EgyUtemez ( Cost H : Hatarido ; 12 Cost P : Haszo ; 13 N : Word; 14 var K : Word; 1 var MaxP: Word; 16 var B : B e o s z t a s ) ; 17 { Bemeet : F e l t e s s z ü k, hogy a mukák a haszuk s z e r i t emövekvőe 18 r e d e z e t t e k : P [ i ] >=P [ i + 1], i = 1.. N 1 19 Kimeet : B[ i ]= j >0 e s e t é az i. mukát a j. apra ütemezzük, 20 ha az i. mukát em válaszjuk, akkor B[ i ]=0 } 21 var 22 i, j : I t e g e r ; 23 Szabad : array [ 1.. MaxH] of boolea ; { a még szabad apok y i l v á t a r t á s á r a } 24 begi { EgyUtemez } 2 M: = 0 ; MaxP: = 0 ; 26 f o r i := 1 to MaxH do 27 Szabad [ i ] : = True ; { kezdetbe mide ap szabad } 28 f o r i :=1 to N do { i c s b e o s z t o t t muka} 29 B[ i ] : = 0 ; 30 f o r i :=1 to N do begi 31 j := H[ i ] ; 32 while ( j >0) ad ( ot Szabad [ j ] ) do 33 Dec ( j ) ; 34 i f j > 0 the begi { va szabad ap i. h a t á r i d e j é i g } 3 B[ i ] : = j ; { b e v á l a s z t j u k az u t o l s ó szabad apra } 36 Szabad [ j ] : = F a l s e ; { a v á l a s z t á s b e j e g y z é s e } 37 Ic (K) ; 38 MaxP:=MaxP+P [ i ] ; 39 ed ; { i f } 40 ed { f o r i } ; 41 ed { EgyUtemez } ; Az algoritmus futási ideje a legrosszabb esetbe a mukák száma szorozva a apok számával. A mohó választás em midig fejezhető ki olya egyszerűe, hogy egy halmazból adott redezés szerit a legkisebb elemet kell választai. Erre mutat példát a következő feladat és aak megoldása.

.3. Feladat: Darabolás Adott egy fémrúd, amelyet megadott számú és hosszúságú darabokra kell felvági. A darabok hosszát milliméterbe kifejezett értékek adják meg. Olya vágógéppel kell a feladatot megoldai, amely egyszerre csak egy vágást tud végezi. A vágások tetszőleges sorredbe elvégezhetőek. Egy vágás költsége megegyezik aak a darabak a hosszával, amit éppe (két darabra) váguk. A céluk optimalizáli a műveletsor teljes költséget. Készítsük programot, amely kiszámítja a vágási műveletsor optimális összköltségét és megad egy olya vágási sorredet, amely optimális költséget eredméyez. Bemeet A be.txt darabol szöveges állomáy első sora egy egész számot tartalmaz, a darabok számát (0 < 1000). A második sor darab pozitív egész számot tartalmaz egy-egy szóközzel elválasztva, a darabok hosszát. A második sorba szereplő számok em agyobbak, mit 1000. Kimeet A be.txt darabol szöveges állomáy első sorába egyetle számot, a vágási műveletsor optimális összköltségét kell íri! A további 1 sor midegyikébe két egész számot kell íri, egy szóközzel elválasztva. Az első szám legye az adott lépésbe kettévágott rúd hossza, a második szám pedig az egyik keletkező darab hossza. Mide sor csak olya hosszúságú darab kettévágását tartalmazhatja, amelyből a korábbi lépések sorá több keletkezett, mit az azóta elvégzett lépések által felhaszáltak száma. Példa bemeet és kimeet bemeet 2 2 7 10 kimeet 26 10 16 7 9 4 4 2 26 10 16 7 9 4 2 2 3. ábra. A példa megoldásáak ábrázolása biáris fával. Elemezzük az optimális megoldás szerkezetét. Vegyük észre, hogy mide darabolás, így az optimális is leírható egy biáris fával. A fa levelei tartalmazzák a bemeetkét kapott darabok hosszait, és mide belső potja aak a darabak a hosszát, amelyből vágással a két fiú-potba lévő darab keletkezett, azaz a két fiáak az összegét. Példák eseté a fa a következőképpe éz ki. A darabolás összköltsége is kifejezhető a fával, evezetese, az összköltség éppe a fa belső (em levél) potjaiba található számok összege. Fordítva is igaz, mide ilye fa egy darabolást ír le. A fa költségé a fa belső potjaiba lévő számok összegét értjük. Tehát keressük az optimális megoldást, mit egy darabolási fát, tehát azt, amelyek a költsége miimális. A darabolási fa költsége kifejezhető a következőképpe. Legyeek d 1,...,d a vágadó darabok hosszai és legye m i a d i darabot tartalmazó levélpot mélysége (a fa gyökerétől vett távolsága) a fába. Ezekkel a jelölésekkel a fa költsége: m i d i 6

Az optimális fára a következő két állítás teljesül..2. lemma. A két legkisebb értéket tartalmazó levélpot mélysége a legagyobb, és testvérek. Bizoyítás. Ha az állítás em teljesüle, akkor a két legmélyebb testvér levélpotot felcserélve a két legkisebb értéket tartalmazó levéllel, kisebb költségű fát kapák..3. lemma. Legye d u és d v a két legkisebb darab. Ha az optimális fába töröljük a d u -t és d v -t tartalmazó levélpotot, akkor olya fát kapuk, amely optimális arra a bemeetre, amely d u és d v helyett a d u + d v darabot tartalmazza. Bizoyítás. A két levél törlésével kapott fa yilvá darabolási fa lesz a módosított bemeetre, amelyek költsége m i d i (d u + d v ) Legye F egy optimális darabolási fa a módosított bemeetre és legye a költsége K. Ha a d u +d v darabot tartalmazó levélpothoz hozzávesszük bal fiúkét a d u értéket tartalmazó, jobb fiúkét pedig a d v értéket tartalmazó új levelet, akkor egy olya fát kapuk, amely darabolási fa lesz az eredeti bemeetre, költsége pedig K + d u + d v. Ez azoba em lehet kisebb, mit az optimális darabolási fa költsége az eredeti bemeetre, tehát Ami az állítás bizoyítását jeleti. m i d i (d u + d v ) K m i d i K + (d u + d v ) m i d i (d u + d v ) Most már megfogalmazhatjuk a mohó stratégiákat. Építsük fel a darabolási fát úgy, hogy lépésekét a két legkisebb értéket tartalmazó potot egy új pot két fiává tesszük, és az új potba a két fiúba lévő érték összegét írjuk. Az 1. Állítás igazolja a mohó választási tulajdoságot, a 2. Állítás pedig az optimális részproblémák tulajdoságot, tehát korrekt algoritmust kapuk. Megvalósítás. A mohó választás megvalósítására prioritási sort alkalmazuk. 1 procedure Darabol ( var D: Darabok ; 2 N:Word; 3 var F : Fa ; 4 var Kolts :Word ) ; var x, y, z, i :Word; 6 begi { Darabol } 7 f o r i :=1 to N do begi { i i c i a l i z á l á s } 8 SorBa ( i ) ; 9 F [ i ]. bal : = 0 ; F [ i ]. jobb : = 0 ; 10 ed { f o r i } ; 11 f o r i :=1 to N 1 do begi { } 12 x := SorBol ; { k i v e s s z ü k a p r i s o r i t á s i s o r b ó l } 13 y := SorBol ; { a két l e g k i s e b b elemet } 14 z := i +N; { új pot l é t e s í t é s e } 1 D[ z ] : =D[ x ]+D[ y ] ; { az új pot é r t é k e } 16 SorBa ( z ) ; { berakjuk a sorba az új fa potot } 17 F [ z ]. bal := x ; { az új pot két f i a x és y } 18 F [ z ]. jobb := y ; 19 Kolts := Kolts +D[ z ] ; 20 ed { f o r i } ; 21 ed { Darabol } ; 22 {A f e l a d a t b a megkövetelt kimeetet a fa b e j á r á s á v a l á l l í t j u k e l ő. } 23 procedure KiIr ; 24 var KiF : Text ; 2 Procedure Bejar ( p :Word ) ; 26 begi { Bejar } 27 i f F [ p ]. bal =0 the e x i t ; 28 WriteL ( KiF, D[ p ] : 1,,D[ F [ p ]. bal ] : 1 ) ; 29 i f F [ p ]. bal <>0 the Bejar ( F [ p ]. bal ) ; 7