58
Mohó algoritmusok Mohó algoritmusok Szlávi Péter Szlávi Péter ELTE IK ELTE IK szlavip @ elte.hu

Mohó algoritmusok

  • Upload
    zuriel

  • View
    77

  • Download
    0

Embed Size (px)

DESCRIPTION

Mohó algoritmusok. Szlávi Péter ELTE IK [email protected].  „A mohóság dicsérete” – bevezetés  Egy gondolatébresztő példa – a mohó algoritmusok „szókincse”  Első példázat a „zenekar”-ról  Második példázat a „fényképeszkedés”-ről  Harmadik példázat a „ültetés”-ről  Konklúzió? - PowerPoint PPT Presentation

Citation preview

Page 1: Mohó algoritmusok

Mohó algoritmusokMohó algoritmusok

Szlávi PéterSzlávi PéterELTE IKELTE [email protected]

Page 2: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 22/70/70

MegpróbáltatásokMegpróbáltatások

„„A mohóság dicsérete” – bevezetésA mohóság dicsérete” – bevezetésEgy gondolatébresztő példa – a mohó Egy gondolatébresztő példa – a mohó

algoritmusok „szókincse”algoritmusok „szókincse”Első példázat a „zenekar”-rólElső példázat a „zenekar”-rólMásodik példázat a Második példázat a

„fényképeszkedés”-ről„fényképeszkedés”-rőlHarmadik példázat a „ültetés”-rőlHarmadik példázat a „ültetés”-rőlKonklúzió?Konklúzió? Komolytalan befejezés, ha még nem Komolytalan befejezés, ha még nem

lenne elég a jókedvlenne elég a jókedv

Page 3: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 33/70/70

„„A mohóság dicsérete” – A mohóság dicsérete” – bevezetésbevezetés

Optimalizációs problémákOptimalizációs problémák A „hagyományos” kereső A „hagyományos” kereső

módsze-rek (módsze-rek (sőt: a backtrack és a sőt: a backtrack és a

dinamikus prog-ramozás isdinamikus prog-ramozás is) ) hosszadalmasakhosszadalmasak

Válasszuk mindig a legjobbnak Válasszuk mindig a legjobbnak tetszőt (a tetszőt (a lokálislokális optimumot) optimumot)

egy kis kalandozás a Carpe diem! nyomán

Lehet, hogy ez Lehet, hogy ez globálisglobális optimum? Be kell látni!optimum? Be kell látni!

Page 4: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 55/70/70

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”Egy esemény-kiválasztási feladatEgy esemény-kiválasztási feladat

Bemenet:Bemenet: E={1..n} esemény egy erőforrásértE={1..n} esemény egy erőforrásért Minden esemény ideje: [kMinden esemény ideje: [kii,v,vii))

i,j kompatibilisek i,j kompatibilisek [k [kii,v,vii))[k[kjj,v,vjj)=)=

Kimenet:Kimenet: M={eM={e11,e,e22…e…eDbDb} e} eiiEE M maximális elemszámúM maximális elemszámú eeii-k páronként kompatibilisek-k páronként kompatibilisek

Page 5: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 66/70/70

[[ ))

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”Próbálkozzunk egy példával!Próbálkozzunk egy példával!

ii kkii vvii

11 11 151522 33 6633 77 121244 55 111155 99 1717

17171616151514141313121211111010998877665544332211

[[ ))[[ )) ))[[[[ ))

Rajzoljunk!Rajzoljunk!

S egy kézenfekvő S egy kézenfekvő megoldás-ötlettel: a megoldás-ötlettel: a backtrackbacktrack-kel!-kel!

Page 6: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 77/70/70

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”Választási lehetőségek:Választási lehetőségek:

1.1. [1,15)[1,15) Db=1Db=1

2.2. [3,6)[3,6) [7,12)[7,12) Db=2Db=2

[9,17)[9,17) Db=2Db=2

3.3. [7,12)[7,12) ilyen már voltilyen már volt Db=1Db=1

4.4. [5,11)[5,11) Db=1Db=1

5.5. [9,17)[9,17) ilyen már voltilyen már volt Db=1Db=1

11 22 33 44 55 66 77 88 99 1010 1111 1212 1313 1414 1515 1616 1717

[[ ))[[ ))[[ )) ))[[[[ ))

Page 7: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 88/70/70

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”Megoldás józanésszelMegoldás józanésszel11::1.1. Eseményenként döntsünk arról, Eseményenként döntsünk arról,

hogy bevesszük vagy nem!hogy bevesszük vagy nem!Bevehető, ha „kompatibilis” az edBevehető, ha „kompatibilis” az ed--digiekkel.digiekkel.

2.2. Válasszunk az események közül Válasszunk az események közül úgy, hogy úgy, hogy a legkevesebbet mu-a legkevesebbet mu-lasszuk ellasszuk el!!

Az az optimális, amelyik leghamaAz az optimális, amelyik leghama--rabb rabb kezdődikkezdődik..

Nem

Nem

nyert!

nyert!

Page 8: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 99/70/70

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”Megoldás józanésszelMegoldás józanésszel22::1.1. Eseményenként döntsünk arról, Eseményenként döntsünk arról,

hogy bevesszük vagy nem!hogy bevesszük vagy nem!Bevehető, ha „kompatibilis” az edBevehető, ha „kompatibilis” az ed--digiekkel.digiekkel.

2.2. Válasszunk az események közül Válasszunk az események közül úgy, hogy a úgy, hogy a legtöbb lehetőség legtöbb lehetőség ma-radjonma-radjon a továbbiak számára! a továbbiak számára!

Az az optimális, amelyik leghamaAz az optimális, amelyik leghama--rabb rabb ér végetér véget..

Lehetséges

Lehetséges

??

Page 9: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 1010/70/70

17171616151514141313121211111010998877665544332211

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”Próbáljuk ezt ki!Próbáljuk ezt ki!

A vég-szerinti sorrend:A vég-szerinti sorrend:

11 22 33 44 55 66 77 88 99 1010 1111 1212 1313 1414 1515 1616 1717

[[ ))[[ ))[[ )) ))[[[[ ))

[[ ))[[ ))

Mohó választással a megoldás:Mohó választással a megoldás:?[[ ))[[ )) ))[[

Page 10: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 1111/70/70

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”Jó ez így általában is? Lássuk be!Jó ez így általában is? Lássuk be!Tegyük föl, hogyTegyük föl, hogy M={e M={e11,e,e22,…,e,…,euu}, }, eeii<e<ei+1i+1 megoldásmegoldás is, is, optimálisoptimális is! is!1.1. Rendezés Rendezés v v11vvii { {11,e,e22,…,e,…,euu} is…} is…

az optimális megoldás az optimális megoldás kezdődhetkezdődhet a a mohómohón választottal. n választottal.

2.2. LegyenLegyen E’={i | v E’={i | v11kkii i=2..n} és i=2..n} ésM’ egy optimális megoldása az E’-vel M’ egy optimális megoldása az E’-vel jellemzett jellemzett redukált problémáredukált problémának, nak, ekkorekkor{1}{1}M’ M’ megoldásmegoldás is és is és optimálisoptimális is. is.

így folytatható is.így folytatható is.

Page 11: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 1212/70/70

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”Mindez nem túl nagy ár Mindez nem túl nagy ár

((matematikamatematika) a hatékonyságért?) a hatékonyságért?

A hatékonyságot vizsgáljuk meg:A hatékonyságot vizsgáljuk meg:

1.1. egy „naiv” megoldásegy „naiv” megoldás

2.2. egy backtrack megoldás, ésegy backtrack megoldás, és

3.3. egy mohó egy mohó

esetében.esetében.

Page 12: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 1313/70/70

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”A „naiv” változat A „naiv” változat („elmélet”)(„elmélet”)::

A megvizsgálandó esetek száma:A megvizsgálandó esetek száma:

Egy i eseményből álló kompatibilitá-Egy i eseményből álló kompatibilitá-sának vizsgálatához szükséges sának vizsgálatához szükséges hasonlítások száma: ihasonlítások száma: i22--nel arányosnel arányos..

Összesen:Összesen:

12i

n nn

1i

1-n2n

1i

21-n1,5 2*ni

n*i2*n

Page 13: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 1414/70/70

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”A „naiv” változat A „naiv” változat („elmélet”)(„elmélet”)::

A megvizsgálandó esetek száma:A megvizsgálandó esetek száma:

Egy i eseményből álló kompatibilitá-Egy i eseményből álló kompatibilitá-sának vizsgálatához szükséges sának vizsgálatához szükséges hasonlítások száma: ihasonlítások száma: i22--nel arányosnel arányos..

Összesen:Összesen:

(Pl. n=9-re 6912 és 20736 közötti!)(Pl. n=9-re 6912 és 20736 közötti!)

12i

n nn

1i

1-n2n

1i

21-n1,5 2*ni

n*i2*n

Page 14: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 1515/70/70

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”A backtrack-es változat A backtrack-es változat (kódja)(kódja)::

Page 15: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 1616/70/70

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”A backtrack-es változat A backtrack-es változat (kódja)(kódja)::

Page 16: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 1717/70/70

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”A backtrack-es változat A backtrack-es változat (kódja)(kódja)::

Page 17: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 1818/70/70

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”A backtrack-es változat A backtrack-es változat

(„empirikusan”)(„empirikusan”)::Próbáljuk ki és következtessünk!Próbáljuk ki és következtessünk!

Zip, exe.Zip, exe.

Page 18: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 1919/70/70

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”A mohó változat A mohó változat (kódja)(kódja)::

Page 19: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 2020/70/70

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”A mohó változat A mohó változat (kódja)(kódja)::

Page 20: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 2121/70/70

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”A mohó változat A mohó változat („empirikusan”)(„empirikusan”)::

Próbáljuk ki és következtessünk!Próbáljuk ki és következtessünk!

Zip, exe.Zip, exe.

Kimond-Kimond-hatjuk: hatjuk:

megéri!!!megéri!!!

Page 21: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 2222/70/70

1.1. LépésekLépésekre bontjuk az eljárásunkat. re bontjuk az eljárásunkat.

2.2. Keresünk egy adott lépésnél Keresünk egy adott lépésnél eldönthető, lokálisan optimális eldönthető, lokálisan optimális kritériumot (kritériumot (mohó választásmohó választás). ).

3.3. belátjukbelátjuk a mohóság működését: a mohóság működését:1.1. van-e optimális megoldás, ami mohó van-e optimális megoldás, ami mohó

választással kezdődik? választással kezdődik?

2.2. a mohó választást hozzávéve a a mohó választást hozzávéve a redukált probléma optimális redukált probléma optimális megoldásához, az eredeti probléma megoldásához, az eredeti probléma megoldását kapjuk?megoldását kapjuk?

4.4. Algoritmizáljuk a mohó megoldást.Algoritmizáljuk a mohó megoldást.

Egy gondolatébresztő példa – Egy gondolatébresztő példa – a mohó algoritmusok a mohó algoritmusok

„szókincse”„szókincse”A mohó megoldás sablonja:A mohó megoldás sablonja:

„„mohó mohó választási választási

tulajdonságtulajdonság””

„„optimális optimális részproblémárészproblémák tulajdonságk tulajdonság” ”

Page 22: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 2323/70/70

Első példázat a „zenekar”-rólElső példázat a „zenekar”-ról

A feladat:A feladat:„„Egy népszerű zenekar a következő 100 napra Egy népszerű zenekar a következő 100 napra vonatkozó fellépéseit tervezi. Sok meghívása van vonatkozó fellépéseit tervezi. Sok meghívása van fellépésre, ezek közül kell a zenekarnak válasz-fellépésre, ezek közül kell a zenekarnak válasz-tani, hogy melyeket fogadja el. Minden fellépés tani, hogy melyeket fogadja el. Minden fellépés pontosan egy napot foglal el. Minden beérkezett pontosan egy napot foglal el. Minden beérkezett meghívási igény egy (meghívási igény egy (k, vk, v) számpárral adott, ami ) számpárral adott, ami azt jelenti, hogy az igénylő azt szeretné, hogy a azt jelenti, hogy az igénylő azt szeretné, hogy a zenekar olyan zenekar olyan nn sorszámú napon tartson nála sorszámú napon tartson nála koncertet, hogy koncertet, hogy kknnvv. A zenekarnak az a célja, . A zenekarnak az a célja, hogy a lehető legtöbb fellépést elvállaljon (termé-hogy a lehető legtöbb fellépést elvállaljon (termé-szetesen egy napon csak egyet).szetesen egy napon csak egyet).Készítsünk programot, amely kiszámítja, hogy Készítsünk programot, amely kiszámítja, hogy mely meghívásokat fogadjunk el, hogy az összes mely meghívásokat fogadjunk el, hogy az összes fellépések száma a lehető legnagyobb legyen; a fellépések száma a lehető legnagyobb legyen; a program adjon is meg egy beosztást!”program adjon is meg egy beosztást!”

Page 23: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 2424/70/70

Első példázat a „zenekar”-rólElső példázat a „zenekar”-ról

A megoldás:A megoldás: Lépésekre bontás – Lépésekre bontás –

a fellépési ajánlatok közül egy (alkalmas) a fellépési ajánlatok közül egy (alkalmas) választásaválasztása

Mohó választás – Mohó választás – kettős probléma: kettős probléma: ajánlat-intervallum,ajánlat-intervallum, intervallumbeli nap;intervallumbeli nap;

stratégia: a leghamarabb lezáruló, stratégia: a leghamarabb lezáruló, legkorábbi napja… miért? L. példákat.legkorábbi napja… miért? L. példákat.

Page 24: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 2727/70/70

Első példázat a „zenekar”-rólElső példázat a „zenekar”-ról

A megoldás A megoldás (folytatás)(folytatás):: Belátás:Belátás:

Nap={1,…,NapDb} – a Nap={1,…,NapDb} – a választható napok választható napok sor-számai sor-számai

Fl={1,…,FlDb} – a Fl={1,…,FlDb} – a fellépésekfellépések sorszámai sorszámai kkii,v,vii i iFl – az i. fellépés Fl – az i. fellépés kezdőkezdő, ill. , ill. végsővégső

nap-sorszáma nap-sorszáma NF={(nNF={(n11,f,f11),…,(n),…,(nDbDb,f,fDbDb)}, n)}, niinnjj, f, fiiffjj (i (ij), j),

nnii[k[kffii,v,vffii

], f], fiiFl i,j=1..Db – a Fl i,j=1..Db – a megoldásmegoldás

NF NF optimális megoldásoptimális megoldás

Page 25: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 2828/70/70

Első példázat a „zenekar”-rólElső példázat a „zenekar”-ról

Def. (fellépések rendezése)Def. (fellépések rendezése)f,f’f,f’Fl, fFl, f<<fff’ (f „kisebb/előbbi”, mint f’), acsa f’ (f „kisebb/előbbi”, mint f’), acsa

a.a. vvff<v<vf’f’ (előbb ér véget) vagy(előbb ér véget) vagy

b.b. vvff=v=vf’f’ és k és kff<k<kf’f’ (ha ugyanakkor (ha ugyanakkor végződik, akkor előbb kezdődik)végződik, akkor előbb kezdődik)

Def. (mohó választás)Def. (mohó választás)SzSzNap „szabad” napok és Fl’ fellépések Nap „szabad” napok és Fl’ fellépések

mellett (nmellett (n**,f,f**) ) mohó választásmohó választás, ha, haa.a. ff**==MinMin<<ff

{f {fFl’ | [kFl’ | [kff..v..vff]]SzSz} – a „legko-} – a „legko-

rábbi” fellépés, amely még elvállalhatórábbi” fellépés, amely még elvállalhatób.b. nn**=Min {n=Min {nSz | nSz | n[k[kf*f*..v..vf*f*]]Sz} – a „legko-Sz} – a „legko-

rábbi” fellépés legkorábbi napjánrábbi” fellépés legkorábbi napján

Page 26: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 2929/70/70

Első példázat a „zenekar”-rólElső példázat a „zenekar”-ról

Z1. Állítás (mohó választási tulajdonság):Z1. Állítás (mohó választási tulajdonság):Ha NF Ha NF optimális megoldásoptimális megoldás és (n és (n**,f,f**) ) mohó választásmohó választás, , akkor NFakkor NF** = {(n = {(n**,f,f**),(n),(n22,f,f22),..,(n),..,(nDbDb,f,fDbDb)} is )} is op-timális megoldásop-timális megoldás..

Bizonyítás:Bizonyítás:NF opt.mo. és (nNF opt.mo. és (n**,f,f**) mohó választás, de ) mohó választás, de (_,f*)(_,f*)NFNF (n(nii,f,fii): n): nii=n=n** ((különben ellentmondásra jutnánk NF optimalitásávalkülönben ellentmondásra jutnánk NF optimalitásával))

Helyettesítsük NF-ben (nHelyettesítsük NF-ben (nii,f,fii)-t (n)-t (n**,f,f**)-gal: )-gal: NF’={(nNF’={(n11,f,f11),…,(n),…,(ni-1i-1,f,fi-1i-1),(n*,f*),(n),(n*,f*),(ni+1i+1,f,fi+1i+1),…,(n),…,(nDbDb,f,fDbDb)} )} NF’ megoldás is és optimális isNF’ megoldás is és optimális isSorszámozzuk újra az NF’-t f-szerinti sorrendben:Sorszámozzuk újra az NF’-t f-szerinti sorrendben:NF*={(nNF*={(n**,f,f**),(n),(n22,f,f22),..,(n),..,(nDbDb,f,fDbDb)})} NFNF** megoldásmegoldás;;NF optimális és ║NF║NF optimális és ║NF║==║NF║NF**║║ NF NF** optimálisoptimális..… … kicsit hosszadalmasabban a kicsit hosszadalmasabban a (_,f*)(_,f*)NFNF –re is… –re is…

Page 27: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 3131/70/70

Első példázat a „zenekar”-rólElső példázat a „zenekar”-ról

Z2. Állítás (optimális részproblémák Z2. Állítás (optimális részproblémák tulaj-donság):tulaj-donság):

HaHa1.1. SzSzNap „szabad” napok, Nap „szabad” napok, 2.2. (n(n**,f,f**) mohó választás Sz mellett és ) mohó választás Sz mellett és 3.3. NFNF** optimális megoldás Sz\{n optimális megoldás Sz\{n**}-ra,}-ra,akkorakkor

(n(n**,f,f**))NFNF** optimális megoldása az Sz-nek. optimális megoldása az Sz-nek.Bizonyítás:Bizonyítás:megoldásmegoldás??

NFNF** (optimális) megoldás Sz\{n (optimális) megoldás Sz\{n**}-ra }-ra

(n(nii,f,fii))NFNF** : n : n**nnii

(n(n**,f,f**))NFNF** megoldásamegoldása lesz az Sz-nek. lesz az Sz-nek.

Page 28: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 3232/70/70

Első példázat a „zenekar”-rólElső példázat a „zenekar”-ról

(Bizonyítás folytatás):(Bizonyítás folytatás):optimálisoptimális? (indirekt)? (indirekt)LL. Db=║NF. Db=║NF**║║

Tfh.Tfh. NF’ = {(n’NF’ = {(n’11,f’,f’11),..,(n’),..,(n’LL,f’,f’LL)} )} optimális optimális meg-oldásmeg-oldás Sz-re, amelyre L Sz-re, amelyre L>>Db+1.Db+1.

A Z1. állításból következik, hogy NF” = A Z1. állításból következik, hogy NF” = {(n{(n**,f,f**),(n’),(n’22,f’,f’22),..,(n’),..,(n’LL,f’,f’LL)} is )} is optimális optimális megol-dásmegol-dás..

Világos, hogy az NF”-ből az (nVilágos, hogy az NF”-ből az (n**,f,f**)-t elhagyva )-t elhagyva egy megoldását kapjuk az Sz\{negy megoldását kapjuk az Sz\{n**}-nak, }-nak, ami jobb, mint az NFami jobb, mint az NF**, hiszen több (L–, hiszen több (L–11>>Db) elemet tartalmaz. Ez ellentmond Db) elemet tartalmaz. Ez ellentmond az állítás 3. feltételének.az állítás 3. feltételének.

Page 29: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 3333/70/70

Első példázat a „zenekar”-rólElső példázat a „zenekar”-ról

A megvalósítás:A megvalósítás: ábrázolásábrázolásConst MaxFellepes=255; {max. fellépésszám; Ef: <256} NapDb=MaxFellepes; {max. napszám, ami most nem is változik}Type TKeresett=Record igaz:Boolean; nap:Byte End; {lin.kereséshez} TFellepes=Record db:Byte; mely:Array [0..MaxFellepes] of Record k,v,s:Byte; end; {fellépés: kezdet/vég/sorsz.} End; TNapok=Set of Byte; {nap: melyik fellépés} TBeoszt=Array [1..MaxFellepes] of Byte; {beosztott fellépés

indexek}Var{Globális} Fel:TFellepes; {fellépések}

M:Byte; {beosztott fellépések száma} Beoszt:TBeoszt; {beosztott fellépések sorszáma} FoglNapok:TNapok;

Page 30: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 3434/70/70

Első példázat a „zenekar”-rólElső példázat a „zenekar”-ról

A megvalósítás:A megvalósítás: a lényegi rész algoritmusaa lényegi rész algoritmusaProcedure FellepestUtemez; Var i:Byte; OK:TKeresett;Begin{FellepestUtemez} Rendezes(Fel); FoglNapok:=[Fel[1].k]; M:=1; Beoszt[1]:=Fel[1].s; For i:=2 to Fel.db do Begin OK:=VallalhatoE(i); If OK.igaz then Begin FoglNapok:=FoglNapok+[OK.nap]; Inc(M); Beoszt[M]:=Fel[i].s; End{If}; End{For i}End;{FellepestUtemez}

Function VallahatóE(Const i:Byte): TKeresett; Var j:Word; k:TKeresett;Begin j:=Fel[i].k; While (j<=Fel[i].v) and (j in FoglNap) do Inc(j); k.igaz:=j<=Fel[i].v; If k.igaz then k.nap:=j; VallalhatoE:=kEnd;{VallalhatoE}

Page 31: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 3535/70/70

Első példázat a „zenekar”-rólElső példázat a „zenekar”-ról

A feladat egy variációjaA feladat egy variációja A feladatot módosítsuk úgy, hogy A feladatot módosítsuk úgy, hogy minden minden

fellépés járjon valamennyi (hfellépés járjon valamennyi (hii) haszonnal) haszonnal. . Természetesen ekkor a célfeladat úgy mó-Természetesen ekkor a célfeladat úgy mó-dosul, hogy a lehető legtöbb haszonra kell dosul, hogy a lehető legtöbb haszonra kell törekedni.törekedni.

Ez az apró módosítás mennyiben érinti a Ez az apró módosítás mennyiben érinti a megoldást? Az sejthető, hogy az eddigi megoldást? Az sejthető, hogy az eddigi törek-vés: minél több fellépést kell törek-vés: minél több fellépést kell elvállalni, nem feltétlenül hozza a legtöbb elvállalni, nem feltétlenül hozza a legtöbb hasznot.hasznot.

Page 32: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 3636/70/70

11 22 33 44 55

[[ ]][[ ]]

[[ ]]

]][[[[ ]]

Első példázat a „zenekar”-Első példázat a „zenekar”-rólról

Egy ellen(?)példa:

ii tóltólii igigii hhii

11 11 44 33

22 22 44 44

33 11 33 11

44 22 33 22

55 33 44 55

Az adatok:

Page 33: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 3737/70/70

11 22 33 44 55

[[ ]][[ ]]

[[ ]]

]][[

[[ ]]

Első példázat a „zenekar”-Első példázat a „zenekar”-rólról

ii tóltólii igigii hhii

33 11 33 11

44 22 33 22

11 11 44 33

22 22 44 44

55 33 44 55

Mohón rendezve:

S így megoldva:

A haszon: 1+2+3+4=10

… a „leghasznosabb” kimaradt!!!

Page 34: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 3838/70/70

11 22 33 44 55

[[ ]][[ ]]

[[ ]]

]][[

[[ ]]

Első példázat a „zenekar”-Első példázat a „zenekar”-rólról

ii tóltólii igigii hhii

33 11 33 11

44 22 33 22

11 11 44 33

22 22 44 44

55 33 44 55

Pedig, ha a 22 helyett az 55-öt tennénk, a haszon: 1+2+3––44+5+5=11 lenne, sőt, ha az 11 helyett ten-nénk az 55-öt, a haszon: 1+2+3–3–3+5+5=12 lenne.

Page 35: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 3939/70/70

11 22 33 44 55

[[ ]][[ ]]

[[ ]]

]][[

[[ ]]

Első példázat a „zenekar”-Első példázat a „zenekar”-rólról

ii tóltólii igigii hhii

55 33 44 55

22 22 44 44

11 11 44 33

44 22 33 22

33 11 33 11

Legyen a mohóság szem-pontja a haszon! Rendez-zük így!

S így megoldva:

Az előbbiek után becsült optimumot elértük! Igaz más módon. De tényleg optimum?

Page 36: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 4040/70/70

11 22 33 44 55

[[ ]][[ ]]

[[ ]]

]][[

[[ ]]

Első példázat a „zenekar”-Első példázat a „zenekar”-rólról

ii tóltólii igigii hhii

55 33 44 55

22 22 44 44

11 11 44 33

44 22 33 22

33 11 33 11

Sajnos nem!!!

Lásd az alábbi javítást:

A javítás értéke: 55+44+33+22=14

Nem találtunk eddig jó mohó szempontot!

Page 37: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 4141/70/70

Első példázat a „zenekar”-Első példázat a „zenekar”-rólról

ii tóltólii igigii hhii

55 33 44 55

22 22 44 44

11 11 44 33

44 22 33 22

33 11 33 11

Jegyezzük föl az ütközés-számot!

Haszonsorrend + napkiválasztás: a legkevésbé ütköző nap…

Íme a végrehajtás menete:

Page 38: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 4242/70/70

Második példázat a „fényké-Második példázat a „fényké-peszkedés”-rőlpeszkedés”-ről

A feladat:A feladat:„„Egy rendezvényre N vendéget hívtak meg. Minden Egy rendezvényre N vendéget hívtak meg. Minden vendég előre jelezte, hogy mettől meddig lesz jelen. vendég előre jelezte, hogy mettől meddig lesz jelen. A szervezők fényképeken akarják megörökíteni a A szervezők fényképeken akarják megörökíteni a rendez-vényen résztvevőket. Azt tervezik, hogy rendez-vényen résztvevőket. Azt tervezik, hogy kiválasztanak néhány időpontot és minden kiválasztanak néhány időpontot és minden kiválasztott időpontban az akkor éppen kiválasztott időpontban az akkor éppen jelenlevőkről csoportképet készítenek. Az a céljuk, jelenlevőkről csoportképet készítenek. Az a céljuk, hogy a lehető legkevesebb képet kelljen készíteni, hogy a lehető legkevesebb képet kelljen készíteni, de mindenki rajta legyen legalább egy ké-pen.de mindenki rajta legyen legalább egy ké-pen.

Írjunk programot, amely kiszámítja, hogy Írjunk programot, amely kiszámítja, hogy legkevesebb hány fényképet kell készíteni, és legkevesebb hány fényképet kell készíteni, és megadja azokat az időpontokat is amikor megadja azokat az időpontokat is amikor csoportképet kell készíteni!”csoportképet kell készíteni!”

Page 39: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 4343/70/70

A megoldás:A megoldás: Lépésekre bontás – a vendégekLépésekre bontás – a vendégek közül egy közül egy

(al-kalmas) választása(al-kalmas) választása Mohó választás – a legkorábban távozó Mohó választás – a legkorábban távozó

ven-dég, aki a legutóbbi fényképezés óta ven-dég, aki a legutóbbi fényképezés óta érkezettérkezett

Belátás:Belátás: V = {vV = {v11,…,v,…,vvDbvDb}, ahol v}, ahol vii = (tól = (tólii,ig,igii) )

(i=1..vDb) – (i=1..vDb) – a vendégek ott tartózkodásaa vendégek ott tartózkodása FT = {ftFT = {ft11,…,ft,…,ftftDbftDb}, ahol ft}, ahol ftii<ft<fti+1i+1

(i=1..ftDb-1) – (i=1..ftDb-1) – a megoldása megoldás FT FT optimális megoldásoptimális megoldás

Második példázat a „fényké-Második példázat a „fényké-peszkedés”-rőlpeszkedés”-ről

Page 40: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 4444/70/70

Def. (vendégek rendezése)Def. (vendégek rendezése)

vvii,v,vjjV, vV, vii igig v vjj („kisebb/előbbi”), acsa („kisebb/előbbi”), acsa vvii.ig.igvvjj.ig (azaz előbb indul haza).ig (azaz előbb indul haza)

Def. (mohó választás)Def. (mohó választás)

W W V még le V még le nemnem fényképezettek és ft fényképezettek és ft utolsóutolsó fényképezés mellett ft fényképezés mellett ft** mohó mohó választásválasztás, ha, haftft**=v.ig, amelyre v:=Min=v.ig, amelyre v:=Minigig

{v {v W | W |

v.tól>ft} – az ft után érkezők közül a v.tól>ft} – az ft után érkezők közül a „legkorábban” távozó távozási ideje„legkorábban” távozó távozási ideje

Második példázat a „fényké-Második példázat a „fényké-peszkedés”-rőlpeszkedés”-ről

Page 41: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 4545/70/70

F1. Állítás (mohó választási tulajdonság):F1. Állítás (mohó választási tulajdonság):Ha FT = {ftHa FT = {ft11,ft,ft22,…,ft,…,ftftDbftDb} } optimális megoldásoptimális megoldás

és ftés ft** mohó választásmohó választás, , akkor FTakkor FT** = {ft = {ft**,ft,ft22,...,ft,...,ftftDbftDb} is } is optimális optimális megoldásmegoldás..

Bizonyítás:Bizonyítás:Ha ftHa ft11ftft**, akkor , akkor

ftft**-ig nincs távozás -ig nincs távozás ft ft11 helyett ft helyett ft** is jó is jó Így FT Így FT megoldásmegoldás volt volt FT FT** megoldásmegoldás volta volta FT FT optimalitásoptimalitása a FT FT** optimalitásoptimalitása.a.

Az ftAz ft11>ft>ft** nem lehetséges, mivel ekkor az első nem lehetséges, mivel ekkor az első vendégről nem készülhetett fotó vendégről nem készülhetett fotó (ft(ft**=v=v11.ig<ft.ig<ft11)) FT FT nemnem lehet lehet megoldásmegoldás, , ami ellentmon-dás.ami ellentmon-dás.

Második példázat a „fényké-Második példázat a „fényké-peszkedés”-rőlpeszkedés”-ről

Page 42: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 4646/70/70

Jelölés:Jelölés: FTFTWW={ft={ft11,…,ft,…,ftkk}, W-ben szereplő ven-}, W-ben szereplő ven-dégekre optimális megoldás. dégekre optimális megoldás.

F2. Állítás (optimális részproblémák F2. Állítás (optimális részproblémák tulaj-donság):tulaj-donság):

Ha Ha 1.1. ftft** mohó választás és mohó választás és 2.2. FTFTWW = {ft = {ft22,...,ft,...,ftftDbftDb} optimális megoldás a} optimális megoldás a

W={vW={vii | v | vii.tól>ft.tól>ft**} esetén, } esetén, akkorakkor

FTFTVV = {ft = {ft**,ft,ft22,..,ft,..,ftftDbftDb} optimális megoldás } optimális megoldás (azaz a teljes V esetén optimális (azaz a teljes V esetén optimális megoldás).megoldás).

Második példázat a „fényké-Második példázat a „fényké-peszkedés”-rőlpeszkedés”-ről

Page 43: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 4747/70/70

Bizonyítás:Bizonyítás:FTFTVV megoldásmegoldás? ? 1.1. FTFTWW megoldás W-re megoldás W-re

minden vendégről, aki ftminden vendégről, aki ft** után után érkezettérkezett (ft (ft**<v<vii.tól), készült fénykép.tól), készült fénykép

2.2. ftft** értelmezése értelmezése ftft**-ig érkezetteket ft-ig érkezetteket ft**-kor -kor

fényképezték le fényképezték le 1. & 2. 1. & 2. FT FTVV megoldásmegoldás

Második példázat a „fényké-Második példázat a „fényké-peszkedés”-rőlpeszkedés”-ről

Page 44: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 4848/70/70

(Bizonyítás folytatása)(Bizonyítás folytatása)FTFTVV optimálisoptimális? (indirekt)? (indirekt)TfhTfh FT FTVV nem optimális megoldás, azaz nem optimális megoldás, azaz

FT”={ft”FT”={ft”11,ft”,ft”22,..,ft”,..,ft”kk} } optimálisoptimális ……, , amelyre k<ftDb.amelyre k<ftDb.F1F1 FTFT**=(ft=(ft**,ft”,ft”22,...,ft”,...,ft”kk) is ) is optimális …optimális …Hagyjuk el, akik ftHagyjuk el, akik ft**-kor jelen voltak. Ezek -kor jelen voltak. Ezek alkotják éppen W-t. alkotják éppen W-t. Mivel FTMivel FT** megoldás során mindenkiről ké- megoldás során mindenkiről ké-szült fénykép, és ftszült fénykép, és ft**-kor a W-beliekről nem -kor a W-beliekről nem készülhetett, ezért róluk csak a későbbi készülhetett, ezért róluk csak a későbbi időpontokban készülhetett.időpontokban készülhetett. (ft”(ft”22,...,ft”,...,ft”kk) megoldás W mellett, vagyis ) megoldás W mellett, vagyis jobb az optimális FTjobb az optimális FTWW-nél. Ez ellentmondás. -nél. Ez ellentmondás.

Második példázat a „fényké-Második példázat a „fényké-peszkedés”-rőlpeszkedés”-ről

Page 45: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 4949/70/70

A megvalósítás:A megvalósítás: ábrázolásábrázolás

Const MaxN=3000; {az intervallumok max. száma} MaxT=1000; {a megoldás időpontok max. száma}Var{Globális} vDb :Word; {az intervallumok száma} Mettol:Array [1..MaxT] of Word;

{az intervallumok: [Mettol[i],i), ha Mettol[i]>0} ftDB:Word; {a megoldás időpontok száma} FT:Array [1..MaxN] of Word; {a megoldás időpontok halmaza}

Második példázat a „fényké-Második példázat a „fényké-peszkedés”-rőlpeszkedés”-ről

A távozás előtt készüljön a fénykép!

Page 46: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 5151/70/70

Második példázat a „fényké-Második példázat a „fényké-peszkedés”-rőlpeszkedés”-ről

A megvalósítás:A megvalósítás: a lényegi rész algoritmusaa lényegi rész algoritmusa

Procedure FotoUtemezes; {Globális Input: MaxT, Mettol Globális Output: ftDB, FT} Var i,t:Integer; Utolso:Integer; Begin{FotoUtemezes} Utolso:=0;{az utolsó beválasztott pont} ftDB:=0; {a beválasztott pontok száma} For t:=1 to MaxT Do Begin If (Mettol[t]>0)and(Utolso<Mettol[t]) Then Begin Utolso:=t; Inc(ftDB); FT[ftDB]:=Utolso; End; End{for t}; End{FotoUtemezes};

van távozó

az utolsó fényképezés

után jött

Page 47: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 5252/70/70

Második példázat a „fényké-Második példázat a „fényké-peszkedés”-rőlpeszkedés”-ről

a beolvasás algoritmusaa beolvasás algoritmusa Procedure Beolvas; {Globális Output: vDb, Mettol} Var Bef:Text; i,tol,ig:Word; Begin{Beolvas} For i:=1 to MaxT do Mettol[i]:=0; Assign(Bef,'fenykep.be'); Reset(Bef); ReadLn(Bef,vDb); For i:=1 to vDb do Begin ReadLn(Bef,tol,ig); If tol>Mettol[ig] then Mettol[ig]:=tol; End; Close(Bef); End{Beolvas};

Hatékonyság

Hely – nem függ vDb-től;

Idő – vDb-től lineárisan (nem négyzetesen, mint a rendezés)

Page 48: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 5353/70/70

Harmadik példázat a Harmadik példázat a „ültetés”-ről„ültetés”-ről

A feladat:A feladat:„„Egy rendezvényt olyan teremben tartanak, ahol M Egy rendezvényt olyan teremben tartanak, ahol M db ülőhely van. Az ülőhelyek 1-től M-ig db ülőhely van. Az ülőhelyek 1-től M-ig sorszámozottak. A rendezvény szervezője sorszámozottak. A rendezvény szervezője megrendeléseket fogad. Minden megrendelés egy megrendeléseket fogad. Minden megrendelés egy (A,B) számpárt tartalmaz, ami azt je-lenti, hogy a (A,B) számpárt tartalmaz, ami azt je-lenti, hogy a megrendelő olyan ülőhelyet szeretne kap-ni, megrendelő olyan ülőhelyet szeretne kap-ni, amelynek S sorszáma A és B közé esik (Aamelynek S sorszáma A és B közé esik (ASSB).B).

Írjunk programot, amely kiszámítja, hogy a szervező Írjunk programot, amely kiszámítja, hogy a szervező a megrendelések alapján a legjobb esetben hány a megrendelések alapján a legjobb esetben hány meg-rendelést tud kielégíteni és meg is ad egy olyan meg-rendelést tud kielégíteni és meg is ad egy olyan jegyki-osztást, amely kielégíti a megrendeléseket!”jegyki-osztást, amely kielégíti a megrendeléseket!”

Page 49: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 5454/70/70

Harmadik példázat a Harmadik példázat a „ültetés”-ről„ültetés”-ről

A megoldás:A megoldás:Észrevétel: nagyban emlékeztet az első fela-Észrevétel: nagyban emlékeztet az első fela-dat megoldására. Itt is, ott is egy interval-dat megoldására. Itt is, ott is egy interval-lum halmazból kell minél többet kiválasztani lum halmazból kell minél többet kiválasztani úgy, hogy a belőlük kiválasztott „pont” más úgy, hogy a belőlük kiválasztott „pont” más intervallumból vettel ne essen egybe. intervallumból vettel ne essen egybe. Ezért az elemzéstől most eltekinthetünk.Ezért az elemzéstől most eltekinthetünk.

Page 50: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 5555/70/70

A megvalósítás:A megvalósítás: adatleírásadatleírásConst MaxN=1000; {a megrendelések max. száma} MaxM=10000; {az ülőhelyek max. száma}Type TMegrendelesek=Array [1..MaxN] of Record k,v:Word End;

{a szék intervallumok kezdő- és vég-időpontjai}

Var{Globális} szekDb:Word; {az ülőhelyek száma} mrDb:Word; {a megrendelések száma} Mr:TMegrendelesek; {a megrendelések} Hany:Integer; {kielégíthető megrendelők

száma} Mo:Array [1..MaxM] of 0..MaxN;

{a megoldás: az i-edik széket a Mo[i]-számú megrendelő kapja, ha ez nem 0}

Harmadik példázat a Harmadik példázat a „ültetés”-ről„ültetés”-ről

Page 51: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 5656/70/70

A megvalósítás:A megvalósítás: a lényegi rész algoritmusaa lényegi rész algoritmusa

Procedure Ultet; {Globális intput: szekDb,mrDb,Mr Globális output: Hany,Mo} Var rS:Array [1..MaxN] of 1..MaxN; i,ii,j:Word; Begin{Ultet} For i:=1 To mrDb Do rS[i]:=i; For i:=1 To szekDb Do Mo[i]:=0; Rendez{mrDb,rS,Mr}; Hany:=0; For i:=1 To mrDb Do Begin ii:=rS[i]; j:=Mr[ii].k; While (j<=Mr[ii].v) and (Mo[j]<>0) do Inc(j); If j<=Mr[ii].v then Begin Mo[j]:=ii; Inc(Hany); End; End{For i}; End{Ultet};

Procedure Ultet; {Globális intput: szekDb,mrDb,Mr Globális output: Hany,Mo} Var rS:Array [1..MaxN] of 1..MaxN; i,ii,j:Word; Begin{Ultet} For i:=1 To mrDb Do rS[i]:=i; For i:=1 To szekDb Do Mo[i]:=0; Rendez{mrDb,rS,Mr}; Hany:=0; For i:=1 To mrDb Do Begin ii:=rS[i]; j:=Mr[ii].k; While (j<=Mr[ii].v) and (Mo[j]<>0) do Inc(j); If j<=Mr[ii].v then Begin Mo[j]:=ii; Inc(Hany); End; End{For i}; End{Ultet};

Harmadik példázat a Harmadik példázat a „ültetés”-ről„ültetés”-ről

rS index-tömb: hogy ne kelljen mozgatni

van még szabad

hely számára?

Page 52: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 5757/70/70

a rendezés algoritmusa egy a rendezés algoritmusa egy hatékony Quicksort:hatékony Quicksort:

Procedure Rendez; {Globális input: mrDb,rS,Mr Globális output: rS} Function Kisebb(i,j:Word):Boolean; Begin{Kisebb}

… {Kisebb:=Mr[i] <v Mr[j]} End{Kisebb}; Function Feloszt(Bal,Jobb : Word): Word;

Var j:Word; … Begin{Feloszt}

… {rS-t szétválogatja a középsőnél kisebbekre és nem kisebbekre; a „középső” a j. helyre kerül} Feloszt:=j End{Feloszt};

Procedure Rendez; {Globális input: mrDb,rS,Mr Globális output: rS} Function Kisebb(i,j:Word):Boolean; Begin{Kisebb}

… {Kisebb:=Mr[i] <v Mr[j]} End{Kisebb}; Function Feloszt(Bal,Jobb : Word): Word;

Var j:Word; … Begin{Feloszt}

… {rS-t szétválogatja a középsőnél kisebbekre és nem kisebbekre; a „középső” a j. helyre kerül} Feloszt:=j End{Feloszt};

Harmadik példázat a Harmadik példázat a „ültetés”-ről„ültetés”-ről

Page 53: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 5858/70/70

a rendezés algoritmusa egy a rendezés algoritmusa egy hatékony Quicksort:hatékony Quicksort:

Procedure Rendez; {Globális input: mrDb,rS,Mr Globális output: rS} Function Kisebb(i,j:Word):Boolean; Begin{Kisebb}

… {Kisebb:=Mr[i] <v Mr[j]} End{Kisebb}; Function Feloszt(Bal,Jobb : Word): Word;

Var j:Word; … Begin{Feloszt}

… {rS-t szétválogatja a középsőnél kisebbekre és nem kisebbekre; a „középső” a j. helyre kerül} Feloszt:=j End{Feloszt};

Procedure Rendez; {Globális input: mrDb,rS,Mr Globális output: rS} Function Kisebb(i,j:Word):Boolean; Begin{Kisebb}

… {Kisebb:=Mr[i] <v Mr[j]} End{Kisebb}; Function Feloszt(Bal,Jobb : Word): Word;

Var j:Word; … Begin{Feloszt}

… {rS-t szétválogatja a középsőnél kisebbekre és nem kisebbekre; a „középső” a j. helyre kerül} Feloszt:=j End{Feloszt};

Harmadik példázat a Harmadik példázat a „ültetés”-ről„ültetés”-ről

Procedure RendezR(Bal,Jobb : Integer); Var f : Word; Begin{RendezR} f:=Feloszt(Bal,Jobb); If f>Bal then RendezR(Bal,f); If f+1<Jobb then RendezR(f+1,Jobb) End{RendezR};

Begin{Rendez} RendezR(1,mrDb) End;{Rendez}

Procedure RendezR(Bal,Jobb : Integer); Var f : Word; Begin{RendezR} f:=Feloszt(Bal,Jobb); If f>Bal then RendezR(Bal,f); If f+1<Jobb then RendezR(f+1,Jobb) End{RendezR};

Begin{Rendez} RendezR(1,mrDb) End;{Rendez}

Page 54: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 5959/70/70

A rendezés érdekessége – A rendezés érdekessége – kérdésekkérdések:: Hány ízben kerül rá a sor?Hány ízben kerül rá a sor? Ugyanazon adatsorozatot esetleg több Ugyanazon adatsorozatot esetleg több

szempontból is kell-e rendezni?szempontból is kell-e rendezni? MemóriaszűkösségMemóriaszűkösség

Harmadik példázat a Harmadik példázat a „ültetés”-ről„ültetés”-ről

Page 55: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 6060/70/70

A rendezés érdekessége – A rendezés érdekessége – megfontolásokmegfontolások:: Csak egyszer, akkor egy „Csak egyszer, akkor egy „egyszerűegyszerű” ren-” ren-

dezés is megteszi. (Hatékonysága: dezés is megteszi. (Hatékonysága: (N(N22)).)). Többszörös sorrendbe állítás: az előzetes Többszörös sorrendbe állítás: az előzetes

sorrend csak ha „muszáj”, változzon. sorrend csak ha „muszáj”, változzon. Például: ha (kezdet,vég) kettősök soroza-tát Például: ha (kezdet,vég) kettősök soroza-tát már rendeztük kezdetmár rendeztük kezdet szerint, majd végszerint, majd vég szerint is kell, akkor azonos végűek között szerint is kell, akkor azonos végűek között maradjon meg a kezdetmaradjon meg a kezdet szerinti sorrend. szerinti sorrend. ((Stabil Stabil rendezés.) rendezés.)

„„Memóriabőség”, akkor a sebességnövelés Memóriabőség”, akkor a sebességnövelés érdekében segédtömbök. Például érdekében segédtömbök. Például index-index-tömbtömb közvetítését igénybe venni (l. előbb közvetítését igénybe venni (l. előbb az rS). Ez megoldás, ha többféleképpen is az rS). Ez megoldás, ha többféleképpen is kell rendezni ugyanazt a sorozatot.kell rendezni ugyanazt a sorozatot.

Harmadik példázat a Harmadik példázat a „ültetés”-ről„ültetés”-ről

Page 56: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 6161/70/70

Konklúzió?Konklúzió?

Néhány további klasszikus feladat, de Néhány további klasszikus feladat, de most már elemzés nélkül. most már elemzés nélkül.

Huffman-kódolás Huffman-kódolás Darabolási feladat Darabolási feladat Pénzváltási feladat(ok) Pénzváltási feladat(ok)

Kérdések:Kérdések: Vannak-e felismerhető jegyei a feladatoknak?Vannak-e felismerhető jegyei a feladatoknak? Láttuk: sablon az van. De, milyen csapdák Láttuk: sablon az van. De, milyen csapdák

vannak? Példák:vannak? Példák: „„Apró” módosítások – egy csipetnyi pénz a Apró” módosítások – egy csipetnyi pénz a

feltételek közéfeltételek közé ……

Page 57: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 6666/70/70

Komolytalan befejezés, ha Komolytalan befejezés, ha még nem lenne elég a jókedv még nem lenne elég a jókedv

A jó kedvért és a mohósághoz néhány A jó kedvért és a mohósághoz néhány web-irodalmi adalék: web-irodalmi adalék:

„„Ami az embert jóllakottá teszi, az nem a Ami az embert jóllakottá teszi, az nem a táplálék mennyisége, hanem a táplálék mennyisége, hanem a mohóság mohóság hiánya.hiánya.” ”

Bhagavad-Gita: Bhagavad-Gita: Tizenhatodik fejezet [21]Tizenhatodik fejezet [21] Tizennegyedik fejezet [17] Tizennegyedik fejezet [17]

„„A jótulajdonságokat szeretjük – a A jótulajdonságokat szeretjük – a rosszrosszakba szerelmesek vagyunk.akba szerelmesek vagyunk.””

Karinthy FrigyesKarinthy Frigyes

Page 58: Mohó algoritmusok

2005. április2005. április Mohó algoritmusokMohó algoritmusok 7070/70/70

Komolytalan befejezés, ha Komolytalan befejezés, ha még nem lenne elég a jókedv még nem lenne elég a jókedv

Vicc:Vicc:„– „– Asszony! Fantasztikus ember ez az Oszkár. Asszony! Fantasztikus ember ez az Oszkár.

Minden kell neki, amit csak meglát.Minden kell neki, amit csak meglát. – Akkor bemutathatnád neki a lányunkat...” – Akkor bemutathatnád neki a lányunkat...”

Kép:Kép: