Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Mohó algoritmusok Szlávi Péter ELTE IK szlavip@elte.hu
2
2005. áprilisMohó algoritmusok 2/70 Megpróbáltatások „A mohóság dicsérete” – bevezetés „A mohóság dicsérete” – bevezetés Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” Első példázat a „zenekar”-ról Első példázat a „zenekar”-ról Második példázat a „fényképeszkedés”- ről Második példázat a „fényképeszkedés”- ről Harmadik példázat a „ültetés”-ről Harmadik példázat a „ültetés”-ről Konklúzió? Konklúzió? Komolytalan befejezés, ha még nem lenne elég a jókedv Komolytalan befejezés, ha még nem lenne elég a jókedv
3
2005. áprilisMohó algoritmusok 3/70 „A mohóság dicsérete” – bevezetés Optimalizációs problémák Optimalizációs problémák A „hagyományos” kereső módsze- rek ( sőt: a backtrack és a dinamikus prog- ramozás is ) hosszadalmasak A „hagyományos” kereső módsze- rek ( sőt: a backtrack és a dinamikus prog- ramozás is ) hosszadalmasak Válasszuk mindig a legjobbnak tetszőt (a lokális optimumot) Válasszuk mindig a legjobbnak tetszőt (a lokális optimumot) egy kis kalandozás a Carpe diem! nyomán Lehet, hogy ez globális optimum? Be kell látni! Lehet, hogy ez globális optimum? Be kell látni!
4
2005. áprilisMohó algoritmusok 4/70 „A mohóság dicsérete” – bevezetés
5
2005. áprilisMohó algoritmusok 5/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” Egy esemény-kiválasztási feladat Bemenet: E={1..n} esemény egy erőforrásért E={1..n} esemény egy erőforrásért Minden esemény ideje: [k i,v i ) Minden esemény ideje: [k i,v i ) i,j kompatibilisek [k i,v i ) [k j,v j )= i,j kompatibilisek [k i,v i ) [k j,v j )= Kimenet: M={e 1,e 2 …e Db } e i E M={e 1,e 2 …e Db } e i E M maximális elemszámú M maximális elemszámú e i -k páronként kompatibilisek e i -k páronként kompatibilisek
6
2005. áprilisMohó algoritmusok 6/70[) Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” Próbálkozzunk egy példával! i kikikiki vivivivi 1115 236 3712 4511 5917 1716151413121110987654321 [) [) )[ [) Rajzoljunk! S egy kézenfekvő megoldás- ötlettel: a backtrack -kel!
7
2005. áprilisMohó algoritmusok 7/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” Választási lehetőségek: 1. [1,15) Db=1 2. [3,6) [7,12) Db=2 [9,17) Db=2 3. [7,12)ilyen már volt Db=1 4. [5,11) Db=1 5. [9,17) ilyen már volt Db=1 1234567891011121314151617 [) [) [) )[ [)
8
2005. áprilisMohó algoritmusok 8/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” Megoldás józanésszel 1 : 1. Eseményenként döntsünk arról, hogy bevesszük vagy nem! Bevehető, ha „kompatibilis” az ed - digiekkel. 2. Válasszunk az események közül úgy, hogy a legkevesebbet mu- lasszuk el! Az az optimális, amelyik leghama - rabb kezdődik. Nem nyert!
9
2005. áprilisMohó algoritmusok 9/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” Megoldás józanésszel 2 : 1. Eseményenként döntsünk arról, hogy bevesszük vagy nem! Bevehető, ha „kompatibilis” az ed - digiekkel. 2. Válasszunk az események közül úgy, hogy a legtöbb lehetőség ma- radjon a továbbiak számára! Az az optimális, amelyik leghama - rabb ér véget. Lehetséges?
10
2005. áprilisMohó algoritmusok 10/70 1716151413121110987654321 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” Próbáljuk ezt ki! A vég-szerinti sorrend: 1234567891011121314151617 [) [) [) )[ [) [) [) Mohó választással a megoldás: ?[) [) )[
11
2005. áprilisMohó algoritmusok 11/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” Jó ez így általában is? Lássuk be! Tegyük föl, hogy M={e 1,e 2,…,e u }, e i <e i+1 megoldás is, optimális is! 1. Rendezés v 1 v i {1,e 2,…,e u } is… az optimális megoldás kezdődhet a mohó n választottal. 2. Legyen E’={i | v 1 k i i=2..n} és M’ egy optimális megoldása az E’-vel jellemzett redukált problémá nak, ekkor {1} M’ megoldás is és optimális is. így folytatható is.
12
2005. áprilisMohó algoritmusok 12/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” Mindez nem túl nagy ár ( matematika ) a hatékonyságért? A hatékonyságot vizsgáljuk meg: 1. egy „naiv” megoldás 2. egy backtrack megoldás, és 3. egy mohó esetében.
13
2005. áprilisMohó algoritmusok 13/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A „naiv” változat („elmélet”) : A megvizsgálandó esetek száma: Egy i eseményből álló kompatibilitá- sának vizsgálatához szükséges hasonlítások száma: i 2 - nel arányos. Összesen:
14
2005. április Mohó algoritmusok 14/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A „naiv” változat („elmélet”) : A megvizsgálandó esetek száma: Egy i eseményből álló kompatibilitá- sának vizsgálatához szükséges hasonlítások száma: i 2 - nel arányos. Összesen: (Pl. n=9-re 6912 és 20736 közötti!)
15
2005. áprilisMohó algoritmusok 15/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A backtrack-es változat (kódja) :
16
2005. áprilisMohó algoritmusok 16/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A backtrack-es változat (kódja) :
17
2005. áprilisMohó algoritmusok 17/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A backtrack-es változat (kódja) :
18
2005. áprilisMohó algoritmusok 18/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A backtrack-es változat („empirikusan”) : Próbáljuk ki és következtessünk! ZipZip, exe. exe Zipexe
19
2005. áprilisMohó algoritmusok 19/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A mohó változat (kódja) :
20
2005. áprilisMohó algoritmusok 20/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A mohó változat (kódja) :
21
2005. áprilisMohó algoritmusok 21/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A mohó változat („empirikusan”) : Próbáljuk ki és következtessünk! ZipZip, exe. exe Zipexe Kimond- hatjuk: megéri!!!
22
2005. áprilisMohó algoritmusok 22/70 1. Lépések re bontjuk az eljárásunkat. 2. Keresünk egy adott lépésnél eldönthető, lokálisan optimális kritériumot ( mohó választás ). 3. belátjuk a mohóság működését: 1. van-e optimális megoldás, ami mohó választással kezdődik? 2. a mohó választást hozzávéve a redukált probléma optimális megoldásához, az eredeti probléma megoldását kapjuk? 4. Algoritmizáljuk a mohó megoldást. Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A mohó megoldás sablonja: „ mohó választási tulajdonság ” „ optimális részproblémák tulajdonság ”
23
2005. áprilisMohó algoritmusok 23/70 Első példázat a „zenekar”-ról A feladat: „ Egy népszerű zenekar a következő 100 napra vonatkozó fellépéseit tervezi. Sok meghívása van fellépésre, ezek közül kell a zenekarnak válasz- tani, hogy melyeket fogadja el. Minden fellépés pontosan egy napot foglal el. Minden beérkezett meghívási igény egy ( k, v ) számpárral adott, ami azt jelenti, hogy az igénylő azt szeretné, hogy a zenekar olyan n sorszámú napon tartson nála koncertet, hogy k n v. A zenekarnak az a célja, hogy a lehető legtöbb fellépést elvállaljon (termé- szetesen egy napon csak egyet). Készítsünk programot, amely kiszámítja, hogy mely meghívásokat fogadjunk el, hogy az összes fellépések száma a lehető legnagyobb legyen; a program adjon is meg egy beosztást!”
24
2005. áprilisMohó algoritmusok 24/70 Első példázat a „zenekar”-ról A megoldás: Lépésekre bontás – a fellépési ajánlatok közül egy (alkalmas) választása Lépésekre bontás – a fellépési ajánlatok közül egy (alkalmas) választása Mohó választás – kettős probléma: Mohó választás – kettős probléma: ajánlat-intervallum, ajánlat-intervallum, intervallumbeli nap; intervallumbeli nap; stratégia: a leghamarabb lezáruló, legkorábbi napja… miért? L. példákat. példákat
25
2005. áprilisMohó algoritmusok 25/70 i tól i ig i 1115 21315 31515 1234567891011121314151617 [] [] ] [1234567891011121314151617 [] [] ] [ Nem megoldás Megoldás Első példázat a „zenekar”-ról Adalék a mohóság kritériumához:
26
2005. áprilisMohó algoritmusok 26/70 i tól i ig i 1115 21315 31515 1234567891011121314151617 [] [] ] [1234567891011121314151617 [] [] ] [ Megoldás Megoldás Első példázat a „zenekar”-ról Adalék a mohóság kritériumához:
27
2005. április Mohó algoritmusok 27/70 Első példázat a „zenekar”-ról A megoldás (folytatás) : Belátás: Belátás: Nap={1,…,NapDb} – a választható napok sor- számai Nap={1,…,NapDb} – a választható napok sor- számai Fl={1,…,FlDb} – a fellépések sorszámai Fl={1,…,FlDb} – a fellépések sorszámai k i,v i i Fl – az i. fellépés kezdő, ill. végső nap- sorszáma k i,v i i Fl – az i. fellépés kezdő, ill. végső nap- sorszáma NF={(n 1,f 1 ),…,(n Db,f Db )}, n i n j, f i f j (i j), n i [k f i,v f i ], f i Fl i,j=1..Db – a megoldás NF={(n 1,f 1 ),…,(n Db,f Db )}, n i n j, f i f j (i j), n i [k f i,v f i ], f i Fl i,j=1..Db – a megoldás NF optimális megoldás NF optimális megoldás
28
2005. áprilisMohó algoritmusok 28/70 Első példázat a „zenekar”-ról Def. (fellépések rendezése) f,f’ Fl, f < f f’ (f „kisebb/előbbi”, mint f’), acsa a. v f <v f’ (előbb ér véget) vagy b. v f =v f’ és k f <k f’ (ha ugyanakkor végződik, akkor előbb kezdődik) Def. (mohó választás) Sz Nap „szabad” napok és Fl’ fellépések mellett (n *,f * ) mohó választás, ha a. f * =Min < f {f Fl’ | [k f..v f ] Sz } – a „legko- rábbi” fellépés, amely még elvállalható b. n * =Min {n Sz | n [k f*..v f* ] Sz} – a „legko- rábbi” fellépés legkorábbi napján
29
2005. áprilisMohó algoritmusok 29/70 Első példázat a „zenekar”-ról Z1. Állítás (mohó választási tulajdonság): Ha NF optimális megoldás és (n *,f * ) mohó választás, akkor NF * = {(n *,f * ),(n 2,f 2 ),..,(n Db,f Db )} is op- timális megoldás. Bizonyítás: NF opt.mo. és (n *,f * ) mohó választás, de (_,f*) NF (n i,f i ): n i =n * ( különben ellentmondásra jutnánk NF optimalitásával ) Helyettesítsük NF-ben (n i,f i )-t (n *,f * )-gal: NF’={(n 1,f 1 ),…,(n i-1,f i-1 ),(n*,f*),(n i+1,f i+1 ),…,(n Db,f Db )} NF’ megoldás is és optimális is Sorszámozzuk újra az NF’-t f-szerinti sorrendben: NF*={(n *,f * ),(n 2,f 2 ),..,(n Db,f Db )} NF * megoldás ; NF optimális és ║NF║ = ║NF * ║ NF * optimális. … kicsit hosszadalmasabban a (_,f*) NF –re is…
30
2005. áprilisMohó algoritmusok 30/70 ] ] nini v * =v i vjvj n*n* njnj fjfj f i =f *
31
2005. áprilisMohó algoritmusok 31/70 Első példázat a „zenekar”-ról Z2. Állítás (optimális részproblémák tulaj- donság): Ha 1. Sz Nap „szabad” napok, 2. (n *,f * ) mohó választás Sz mellett és 3. NF * optimális megoldás Sz\{n * }-ra, akkor (n *,f * ) NF * optimális megoldása az Sz-nek. Bizonyítás: megoldás ? NF * (optimális) megoldás Sz\{n * }-ra (n i,f i ) NF * : n * n i (n *,f * ) NF * megoldása lesz az Sz-nek.
32
2005. áprilisMohó algoritmusok 32/70 Első példázat a „zenekar”-ról (Bizonyítás folytatás): optimális ? (indirekt) L. Db=║NF * ║ Tfh. NF’ = {(n’ 1,f’ 1 ),..,(n’ L,f’ L )} optimális meg- oldás Sz-re, amelyre L > Db+1. A Z1. állításból következik, hogy NF” = {(n *,f * ),(n’ 2,f’ 2 ),..,(n’ L,f’ L )} is optimális megol- dás. Világos, hogy az NF”-ből az (n *,f * )-t elhagyva egy megoldását kapjuk az Sz\{n * }-nak, ami jobb, mint az NF *, hiszen több (L–1 > Db) elemet tartalmaz. Ez ellentmond az állítás 3. feltételének.
33
2005. áprilisMohó algoritmusok 33/70 Első példázat a „zenekar”-ról A megvalósítás: ábrázolás ábrázolás Const 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;
34
2005. áprilisMohó algoritmusok 34/70 Első példázat a „zenekar”-ról A megvalósítás: a lényegi rész algoritmusa a lényegi rész algoritmusa Procedure 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:=k End;{VallalhatoE}
35
2005. áprilisMohó algoritmusok 35/70 Első példázat a „zenekar”-ról A feladat egy variációja A feladatot módosítsuk úgy, hogy minden fellépés járjon valamennyi (h i ) haszonnal. Természetesen ekkor a célfeladat úgy mó- dosul, hogy a lehető legtöbb haszonra kell törekedni. A feladatot módosítsuk úgy, hogy minden fellépés járjon valamennyi (h i ) haszonnal. Természetesen ekkor a célfeladat úgy mó- dosul, hogy a lehető legtöbb haszonra kell törekedni. Ez az apró módosítás mennyiben érinti a megoldást? Az sejthető, hogy az eddigi törek- vés: minél több fellépést kell elvállalni, nem feltétlenül hozza a legtöbb hasznot. Ez az apró módosítás mennyiben érinti a megoldást? Az sejthető, hogy az eddigi törek- vés: minél több fellépést kell elvállalni, nem feltétlenül hozza a legtöbb hasznot.
36
2005. áprilisMohó algoritmusok 36/70 12345 [] [] [] ][ [] Első példázat a „zenekar”-ról Egy ellen(?)példa:i tól i ig i hihihihi1143 2244 3131 4232 5345 Az adatok:
37
2005. áprilisMohó algoritmusok 37/70 12345 [] [] [] ][ [] Első példázat a „zenekar”-ról i tól i ig i hihihihi3131 4232 1143 2244 5345 Mohón rendezve: S így megoldva: A haszon: 1+2+3+4=10 … a „leghasznosabb” kimaradt!!!
38
2005. áprilisMohó algoritmusok 38/70 12345 [] [] [] ][ [] Első példázat a „zenekar”-ról i tól i ig i hihihihi3131 4232 1143 2244 5345 2 5 –4+5 1 5 –3+5 Pedig, ha a 2 helyett az 5 -öt tennénk, a haszon: 1+2+3 –4+5 =11 lenne, sőt, ha az 1 helyett ten- nénk az 5 -öt, a haszon: 1+2+3 –3+5 =12 lenne.
39
2005. áprilisMohó algoritmusok 39/70 12345 [] [] [] ][ [] Első példázat a „zenekar”-ról i tól i ig i hihihihi5345 2244 1143 4232 3131 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?
40
2005. áprilisMohó algoritmusok 40/70 12345 [] [] [] ][ [] Első példázat a „zenekar”-ról i tól i ig i hihihihi5345 2244 1143 4232 3131 Sajnos nem!!! Lásd az alábbi javítást: 5432 A javítás értéke: 5 + 4 + 3 + 2 =14 Nem találtunk eddig jó mohó szempontot!
41
2005. áprilisMohó algoritmusok 41/70 Első példázat a „zenekar”-ról i tól i ig i hihihihi 5345 2244 1143 4232 3131 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:
42
2005. áprilisMohó algoritmusok 42/70 Második példázat a „fényké- peszkedés”-ről A feladat: „Egy rendezvényre N vendéget hívtak meg. Minden vendég előre jelezte, hogy mettől meddig lesz jelen. A szervezők fényképeken akarják megörökíteni a rendez- vényen résztvevőket. Azt tervezik, hogy kiválasztanak néhány időpontot és minden kiválasztott időpontban az akkor éppen jelenlevőkről csoportképet készítenek. Az a céljuk, hogy a lehető legkevesebb képet kelljen készíteni, de mindenki rajta legyen legalább egy ké- pen. Írjunk programot, amely kiszámítja, hogy legkevesebb hány fényképet kell készíteni, és megadja azokat az időpontokat is amikor csoportképet kell készíteni!”
43
2005. áprilisMohó algoritmusok 43/70 A megoldás: Lépésekre bontás – a vendégek közül egy (al- kalmas) választása Lépésekre bontás – a vendégek közül egy (al- kalmas) választása Mohó választás – a legkorábban távozó ven- dég, aki a legutóbbi fényképezés óta érkezett Mohó választás – a legkorábban távozó ven- dég, aki a legutóbbi fényképezés óta érkezett Belátás: Belátás: V = {v 1,…,v vDb }, ahol v i = (tól i,ig i ) (i=1..vDb) – a vendégek ott tartózkodása V = {v 1,…,v vDb }, ahol v i = (tól i,ig i ) (i=1..vDb) – a vendégek ott tartózkodása FT = {ft 1,…,ft ftDb }, ahol ft i <ft i+1 (i=1..ftDb-1) – a megoldás FT = {ft 1,…,ft ftDb }, ahol ft i <ft i+1 (i=1..ftDb-1) – a megoldás FT optimális megoldás FT optimális megoldás Második példázat a „fényké- peszkedés”-ről
44
2005. áprilisMohó algoritmusok 44/70 Def. (vendégek rendezése) v i,v j V, v i ig v j („kisebb/előbbi”), acsa v i.ig v j.ig (azaz előbb indul haza) Def. (mohó választás) W V még le nem fényképezettek és ft utolsó fényképezés mellett ft * mohó választás, ha ft * =v.ig, amelyre v:=Min ig {v W | v.tól>ft} – az ft után érkezők közül a „legkorábban” távozó távozási ideje Második példázat a „fényké- peszkedés”-ről
45
2005. áprilisMohó algoritmusok 45/70 F1. Állítás (mohó választási tulajdonság): Ha FT = {ft 1,ft 2,…,ft ftDb } optimális megoldás és ft * mohó választás, akkor FT * = {ft *,ft 2,...,ft ftDb } is optimális megoldás. Bizonyítás: Ha ft 1 ft *, akkor ft * -ig nincs távozás ft 1 helyett ft * is jó Így FT megoldás volt FT * megoldás volta FT optimalitás a FT * optimalitás a. Az ft 1 >ft * nem lehetséges, mivel ekkor az első vendégről nem készülhetett fotó (ft * =v 1.ig ft * nem lehetséges, mivel ekkor az első vendégről nem készülhetett fotó (ft * =v 1.ig<ft 1 ) FT nem lehet megoldás, ami ellentmon- dás. Második példázat a „fényké- peszkedés”-ről
46
2005. áprilisMohó algoritmusok 46/70 Jelölés: FT W ={ft 1,…,ft k }, W-ben szereplő ven- dégekre optimális megoldás. F2. Állítás (optimális részproblémák tulaj- donság): Ha 1. ft * mohó választás és 2. FT W = {ft 2,...,ft ftDb } optimális megoldás a W={v i | v i.tól>ft * } esetén, akkor FT V = {ft *,ft 2,..,ft ftDb } optimális megoldás (azaz a teljes V esetén optimális megoldás). Második példázat a „fényké- peszkedés”-ről
47
2005. áprilisMohó algoritmusok 47/70 Bizonyítás: FT V megoldás ? 1. FT W megoldás W-re minden vendégről, aki ft * után érkezett (ft * <v i.tól), készült fénykép 2. ft * értelmezése ft * -ig érkezetteket ft * -kor fényképezték le 1. & 2. FT V megoldás Második példázat a „fényké- peszkedés”-ről
48
2005. áprilisMohó algoritmusok 48/70 (Bizonyítás folytatása) FT V optimális ? (indirekt) Tfh FT V nem optimális megoldás, azaz FT”={ft” 1,ft” 2,..,ft” k } optimális …, amelyre k<ftDb. FT”={ft” 1,ft” 2,..,ft” k } optimális …, amelyre k<ftDb. F1 FT * =(ft *,ft” 2,...,ft” k ) is optimális … Hagyjuk el, akik ft * -kor jelen voltak. Ezek alkotják éppen W-t. Mivel FT * megoldás során mindenkiről ké- szült fénykép, és ft * -kor a W-beliekről nem készülhetett, ezért róluk csak a későbbi időpontokban készülhetett. (ft” 2,...,ft” k ) megoldás W mellett, vagyis jobb az optimális FT W -nél. Ez ellentmondás. Második példázat a „fényké- peszkedés”-ről
49
2005. áprilisMohó algoritmusok 49/70 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 }Mettol Második példázat a „fényké- peszkedés”-ről A távozás előtt készüljön a fénykép!
50
1234567891011121314151617 [] [] [] ][ [] i tól i ig i 1115 2511 31015 4811 5917 Mettől: Második példázat a „fényké- peszkedés”-ről Az ábrázolás magyarázata:00000000000000100 00000000005000100000000000050001000000000000080001000000000000080001009 000000000080001009
51
2005. áprilisMohó algoritmusok 51/70 Második példázat a „fényké- peszkedés”-ről A megvalósítás: a lényegi rész algoritmusa a 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
52
2005. áprilisMohó algoritmusok 52/70 Második példázat a „fényké- peszkedés”-ről a beolvasás algoritmusa a 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)
53
2005. áprilisMohó algoritmusok 53/70 Harmadik példázat a „ültetés”- ről A feladat: „Egy rendezvényt olyan teremben tartanak, ahol M db ülőhely van. Az ülőhelyek 1-től M-ig sorszámozottak. A rendezvény szervezője megrendeléseket fogad. Minden megrendelés egy (A,B) számpárt tartalmaz, ami azt je- lenti, hogy a megrendelő olyan ülőhelyet szeretne kap- ni, amelynek S sorszáma A és B közé esik (A S B). Írjunk programot, amely kiszámítja, hogy a szervező a megrendelések alapján a legjobb esetben hány meg- rendelést tud kielégíteni és meg is ad egy olyan jegyki- osztást, amely kielégíti a megrendeléseket!”
54
2005. áprilisMohó algoritmusok 54/70 Harmadik példázat a „ültetés”- ről A megoldás: Észrevétel: nagyban emlékeztet az első fela- dat megoldására. Itt is, ott is egy interval- lumhalmazból kell minél többet kiválasztani úgy, hogy a belőlük kiválasztott „pont” más intervallumból vettel ne essen egybe. első fela- datelső fela- dat Ezért az elemzéstől most eltekinthetünk.
55
2005. áprilisMohó algoritmusok 55/70 A megvalósítás: adatleírás adatleírás Const 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 „ültetés”- ről
56
2005. áprilisMohó algoritmusok 56/70 A megvalósítás: a lényegi rész algoritmusa a 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 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 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 „ültetés”- ről rS index- tömb: hogy ne kelljen mozgatni van még szabad hely számára?
57
2005. áprilisMohó algoritmusok 57/70 a rendezés algoritmusa egy hatékony Quicksort: a rendezés algoritmusa egy 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 „ültetés”- ről
58
2005. áprilisMohó algoritmusok 58/70 a rendezés algoritmusa egy hatékony Quicksort: a rendezés algoritmusa egy 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 „ü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}
59
2005. áprilisMohó algoritmusok 59/70 A rendezés érdekessége – kérdések: A rendezés érdekessége – kérdések: Hány ízben kerül rá a sor? Hány ízben kerül rá a sor? Ugyanazon adatsorozatot esetleg több szempontból is kell-e rendezni? Ugyanazon adatsorozatot esetleg több szempontból is kell-e rendezni? Memóriaszűkösség Memóriaszűkösség Harmadik példázat a „ültetés”- ről
60
2005. áprilisMohó algoritmusok 60/70 A rendezés érdekessége – megfontolások : A rendezés érdekessége – megfontolások : Csak egyszer, akkor egy „ egyszerű ” ren- dezés is megteszi. (Hatékonysága: (N 2 )). Csak egyszer, akkor egy „ egyszerű ” ren- dezés is megteszi. (Hatékonysága: (N 2 )). Többszörös sorrendbe állítás: az előzetes sorrend csak ha „muszáj”, változzon. Például: ha (kezdet,vég) kettősök soroza- tát már rendeztük kezdet szerint, majd vég szerint is kell, akkor azonos végűek között maradjon meg a kezdet szerinti sorrend. ( Stabil rendezés.) Többszörös sorrendbe állítás: az előzetes sorrend csak ha „muszáj”, változzon. Például: ha (kezdet,vég) kettősök soroza- tát már rendeztük kezdet szerint, majd vég szerint is kell, akkor azonos végűek között maradjon meg a kezdet szerinti sorrend. ( Stabil rendezés.) „Memóriabőség”, akkor a sebességnövelés érdekében segédtömbök. Például index- tömb közvetítését igénybe venni (l. előbb az rS). Ez megoldás, ha többféleképpen is kell rendezni ugyanazt a sorozatot. „Memóriabőség”, akkor a sebességnövelés érdekében segédtömbök. Például index- tömb közvetítését igénybe venni (l. előbb az rS). Ez megoldás, ha többféleképpen is kell rendezni ugyanazt a sorozatot. Harmadik példázat a „ültetés”- ről
61
2005. áprilisMohó algoritmusok 61/70 Konklúzió? Néhány további klasszikus feladat, de most már elemzés nélkül. Huffman-kódolás Huffman-kódolás Huffman-kódolás Darabolási feladat Darabolási feladat Darabolási feladat Darabolási feladat Pénzváltási feladat(ok) Pénzváltási feladat(ok) Pénzváltási feladat(ok) Pénzváltási feladat(ok)Kérdések: Vannak-e felismerhető jegyei a feladatoknak? Vannak-e felismerhető jegyei a feladatoknak? Láttuk: sablon az van. De, milyen csapdák vannak? Példák: Láttuk: sablon az van. De, milyen csapdák vannak? Példák: „Apró” módosítások – egy csipetnyi pénz a feltételek közé „Apró” módosítások – egy csipetnyi pénz a feltételek közé …
62
2005. áprilisMohó algoritmusok 62/70 Konklúzió? Huffman-kódolás Adott egy karaktersorozat, tömörítsük úgy, hogy minden karakterhez egy új, változó bitszámú kó- dot rendelünk, amelyekből állítjuk össze a tömör kódsorozatot! Mohó választás : egy bináris fa felépítése a gya- koriság szerinti legkisebbek egyesítésével kumu- lált gyakorisággal.
63
2005. áprilisMohó algoritmusok 63/70 Konklúzió? Huffman-kódolás (folytatás) „képregénye”:
64
2005. áprilisMohó algoritmusok 64/70 Konklúzió? Darabolás Adott egy fémrúd, amelyet megadott számú és hosszúságú darabokra kell vágni. Olyan vágó- géppel kell a feladatot megoldani, amely egyszer- re csak egy vágást tud végezni. A vágások tetsző- leges sorrendben végezhetők. Egy vágás költsége megegyezik annak a darabnak a hosszával, amit éppen két darabra vágunk. Milyen sorrendben kell a darabolást végezni, hogy minimális legyen a költség? Mohó választás : a legnagyobb darabot.
65
2005. áprilisMohó algoritmusok 65/70 Konklúzió? Pénzváltási feladat(ok) N Ft-ot kell váltani úgy, hogy a lehető legke- vesebb pénzérmét használjunk fel, ha az érmék: 100, 50, 20, 10, 5, 2, 1 és N tetszőleges 100, 50, 20, 10, 5, 2, 1 és N tetszőleges Mohó választás : a legnagyobb érméből, a lehető legtöbbet. 3, 2 és N=7 3, 2 és N=7 a mohó nem ad semmilyen eredményt! Hipotetikus ok: nem minden szám (1) állít- ható elő ezek összegeként. 8, 6, 4, 1 és N=10 8, 6, 4, 1 és N=10 a mohó nem optimális eredményt ad! Hipotetikus ok: egymásnak nem egész- számú többszörösei (c i+1 †c i ).
66
2005. áprilisMohó algoritmusok 66/70 Komolytalan befejezés, ha még nem lenne elég a jókedv A jó kedvért és a mohósághoz néhány web-irodalmi adalék: „ Ami az embert jóllakottá teszi, az nem a táplálék mennyisége, hanem a mohóság hiánya. ” „ Ami az embert jóllakottá teszi, az nem a táplálék mennyisége, hanem a mohóság hiánya. ” Bhagavad-Gita: Bhagavad-Gita: Bhagavad-Gita Tizenhatodik fejezet [21] Tizenhatodik fejezet [21] Tizenhatodik fejezet Tizenhatodik fejezet Tizennegyedik fejezet [17] Tizennegyedik fejezet [17] „ A jótulajdonságokat szeretjük – a rossz akba szerelmesek vagyunk. ” „ A jótulajdonságokat szeretjük – a rossz akba szerelmesek vagyunk. ” Karinthy Frigyes Karinthy Frigyes
67
2005. áprilisMohó algoritmusok 67/70 Komolytalan befejezés, ha még nem lenne elég a jókedv Bhagavad-GitaBhagavad-Gita-ról: Bhagavad-Gita A Bhagavad-gítá a védikus irodalom egyik alapműve. Eredetileg a Mahábhárata című eposz része. Jelentősége a hinduizmuson belül hasonló mértékű, mint a keresztény vallásban a Bibliáé. A Bhagavad-gíta cím szó szerint azt jelenti, hogy „Isten éneke”. Tizennyolc fejezetből és hétszáz szanszkrit nyelvű (négysoros) versből áll, amely több mint ötezer éve örvend köztiszteletnek.
68
2005. áprilisMohó algoritmusok 68/70 Komolytalan befejezés, ha még nem lenne elég a jókedv Tizenhatodik fejezetTizenhatodik fejezet [21]: Tizenhatodik fejezet „... Három kapu nyílik e pokolba: a kéj, a düh és a mohóság. Minden józan embernek meg kell válnia tőlük, mert a lélek lealacsonyodá- sához vezetnek....” Tizennegyedik fejezetTizennegyedik fejezet [17] Tizennegyedik fejezet „... A jóság kötőerejéből igazi tudás származik, a szenvedélyből mohóság, a tudatlanságból pedig ostobaság, őrültség és illúzió....”
69
2005. áprilisMohó algoritmusok 69/70 Komolytalan befejezés, ha még nem lenne elég a jókedv Karinthy Frigyesről: A magyar irodalom egyik „alapműve”. Eredetileg a világirodalom része. Jelentősége a minden irodalmi izmuson belül hasonló, mint a keresztény vallásban a Pá- páé. A „Karinthy Frigyes” név szó szerint azt jelenti, hogy „Karinthy Frigyes”, bár jelenthetne egészen mást is. Tizennyolc milliárd neuronból, s legalább ennyi gliasejtből áll agya, a leginkább említésre ér- demes a „fej”-ezete, amely „papír-lenyomata” több mint ötven éve örvend köztiszteletnek.
70
2005. áprilisMohó algoritmusok 70/70 Komolytalan befejezés, ha még nem lenne elég a jókedv Vicc: Vicc: „– Asszony! Fantasztikus ember ez az Oszkár. Minden kell neki, amit csak meglát. – Akkor bemutathatnád neki a lányunkat...” Kép: Kép:
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.