Mohó algoritmusok Szlávi Péter ELTE IK

Slides:



Advertisements
Hasonló előadás
Life through the lenses Enikő Bereczki 2RF. Egy kép többet ér ezer szónál Mitől jó egy sajtófotó? Milyen hatással van a közvéleményre? Milyen a sajtófotós.
Advertisements

4. Előadás: A mohó algoritmus
. Magyar Gyógytornászok Társasága V. Kongresszusa Sopron november (Élmény) beszámoló a tanszék 9 előadásáról.
Programozási alapismeretek
Programozási alapismeretek 5. előadás. ELTE Szlávi - Zsakó: Programozási alapismeretek 5.2/  Programozási tételek.
Matematika II. 2. előadás Geodézia szakmérnöki szak 2012/2013. tanév Műszaki térinformatika ágazat őszi félév.
Matematika II. 1. előadás Geodézia szakmérnöki szak 2012/2013. tanév/
Algebrai specifikációk Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
INFOÉRA Kombinatorikai algoritmusok (Horváth Gyula és Szlávi Péter előadásai felhasználásával) Juhász István-Zsakó László: Informatikai.
Rekurzió (Horváth Gyula és Szlávi Péter előadásai felhasználásával)
INFOÉRA Dinamikus programozás (Horváth Gyula és Szlávi Péter előadásai felhasználásával) Juhász István-Zsakó László: Informatikai képzések.
Programozás alapjai A programozás azt a folyamatot jelenti, melynek során a feladatot a számítógép számára érthető formában írjuk le. C++, Delphi, Java,
Programozási alapismeretek 4. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 4.2/  A szöveg A szöveg.
Programozási alapismeretek 3. előadás
Programozási alapismeretek 13. előadás. ELTE Érdekességek - kombinatorika  Az iskola bejáratánál N lépcsőfok van. Egyszerre maximum K fokot tudunk lépni,
Programozási alapismeretek
Programozási alapismeretek 10. előadás
Programozási alapismeretek 5. előadás. ELTE 2/  Programozási tételek – a lényeglényeg  Sorozatszámítás Sorozatszámítás.
Programozási alapismeretek 8. előadás. ELTE 2/  További programozási tételek További programozási tételek 
Programozási alapismeretek 9. előadás. ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás2/
Programozási alapismeretek 12. előadás. ELTE  Tapasztalatok a rendezésről Tapasztalatok a rendezésről  Keresés rendezett sorozatban Keresés rendezett.
Optimális részhalmaz keresése Keresési tér. 0,0,0,0 1,0,0,0 0,1,0,0 0,0,1,0 0,0,0,10,0,1,1 1,1,0,0 1,0,1,0 0,1,1,0 1,1,1,0 1,0,1,1 0,1,1,1 1,1,1,11,1,0,1.
MI 2003/ Alakfelismerés - még egy megközelítés: még kevesebbet tudunk. Csak a mintánk adott, de címkék nélkül. Csoportosítás (klaszterezés, clustering).
Metal/plastic foam projekt
OPERÁCIÓKUTATÁS Kalmár János, 2012 Tartalom A nulla-egy LP megoldása Hátizsák feladat.
Szakdolgozat címe Készítette: X.Y Miskolci Egyetem
A digitális számítás elmélete
Eseményalgebra, kombinatorika
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.1/ Keresés Specifikáció:  Bemenet: N:Egész, X:Tömb[1..N:Valami]
ELTE Szlávi-Zsakó: Programozási alapismeretek 8.1/ Kiválogatás Specifikáció:  Bemenet: N:Egész, X:Tömb[1..N:Valami]
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.1/ Összegzés mátrixra Feladat: Egy mátrix elemeinek összege.
Szlávi Péter ELTE IK Média- és Oktatásinformatika Tanszék 2010 Kombinatorikai algoritmusok.
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.1/ Sorozatszámítás Specifikáció (a végleges) :  Bemenet:
ELTE Szlávi-Zsakó: Programozási alapismeretek Szlávi-Zsakó: Programozási alapismeretek 3. 1/
Trajectori Adatok feldolgozása DirectionPreserving Trajectory Simplification (Cheng Long, Raymond ChiWing Wong, H. V. Jagadish) Forrás: Készítette: Béleczki.
Dijkstra algoritmusa Egy csúcsból a többibe vezető legkisebb költségű út megkeresése Az algoritmus működésének leírása és bemutatása LL.
Játékelméleti alapfogalmak előadás
Most pedig jöjjön a mai napunk sztárja: a J/  részecske!
Könyvösszefoglaló Készítette: Zimányi Orsolya
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
A Lean és az emberi tényező kapcsolata
3.2. A program készítés folyamata Adatelemzés, adatszerkezetek felépítése Típus, változó, konstans fogalma, szerepe, deklarációja.
$ Információ Következmény Döntés Statisztikai X.  Gyakorlati problémák megoldásának alapja  Elemzéseink célja és eredménye  Központi szerep az egyén.
Matematika II. 1. előadás Geodézia szakmérnöki szak 2010/2011. tanév Kataszteri ágazat tavaszi félév.
KOMBINÁCIÓK ISMÉTLÉS NÉLKÜLI ESET DEFINÍCIÓ
1 AAO folytatás ++ Csink László. 2 Rekurzív bináris keresés (rendezett tömbben) public static int binker(int[] tomb, int value, int low, int high) public.
Malena Film, amelyet minden szülőnek látnia kell. Hogyan élik meg a fiúk a pubertást és hogyan nem ajánlatos…
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Automatikus modellalkotás PDDL tanulás. Problémák PDDL leírásokkal Statikus, a környezet (domain) változását nem képes figyelembe venni Új igények is.
Tömeggyarapodás hasonlóságelemzése Melyik tápanyag összeállítás lenne a legmegfelelőbb sertések számára, minél nagyobb tömeggyarapodás elérése céljából.
Dinamikus programozás
MI 2003/ Mi lenne a b legjobb választása? Statisztikai eljárásoknál az un. Fisher féle lineáris diszkriminancia függvény adja a legjobb szétválasztási.
Algoritmizálás, adatmodellezés tanítása 8. előadás.
Dijkstra-algoritmus. A Dijkstra-algoritmus egy mohó algoritmus, amivel irányított gráfokban lehet megkeresni a legrövidebb utakat egy adott csúcspontból.
Programozási alapismeretek 8. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/  További programozási.
Programozási alapismeretek 10. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 10.2/  Kiválogatás + összegzés.
1 Alternatív optimum Nem csak egy megoldása van!.
Diszjunkt halmazok adatszerkezete A diszjunkt halmaz adatszerkezet diszjunkt dinamikus halmazok S={S 1,…,S n } halmaza. Egy halmazt egy képviselője azonosít.
Programozási alapismeretek 11. előadás
Automatikus fizikai tervezési javaslatok XML adatbázisokhoz Balogh Bernadett Kresz Marcell Cseh Tamás.
INFOÉRA 2006 Véletlenszámok
Geometriai feladatok programozása Geometriai programozás Szlávi Péter ELTE IK Média- és Oktatásinformatika Tanszék 2010.
Mediánok és rendezett minták
Nem módosítható keresések
Ültetési rend létrehozása
INFO Savaria'2005 Szlávi Péter ELTE IK
Algoritmusok és Adatszerkezetek I.
Algoritmusok és Adatszerkezetek I.
Algoritmusok és Adatszerkezetek I.
Algoritmusok és Adatszerkezetek I.
Előadás másolata:

Mohó algoritmusok Szlávi Péter ELTE IK

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 

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!

2005. áprilisMohó algoritmusok 4/70 „A mohóság dicsérete” – bevezetés

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

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 [) [) )[ [) Rajzoljunk! S egy kézenfekvő megoldás- ötlettel: a backtrack -kel!

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= [) [) [) )[ [)

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!

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?

2005. áprilisMohó algoritmusok 10/ Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” Próbáljuk ezt ki! A vég-szerinti sorrend: [) [) [) )[ [) [) [) Mohó választással a megoldás: ?[) [) )[

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.

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.

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:

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 közötti!)

2005. áprilisMohó algoritmusok 15/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A backtrack-es változat (kódja) :

2005. áprilisMohó algoritmusok 16/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A backtrack-es változat (kódja) :

2005. áprilisMohó algoritmusok 17/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A backtrack-es változat (kódja) :

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

2005. áprilisMohó algoritmusok 19/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A mohó változat (kódja) :

2005. áprilisMohó algoritmusok 20/70 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A mohó változat (kódja) :

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

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 ”

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

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

2005. áprilisMohó algoritmusok 25/70 i tól i ig i [] [] ] [ [] [] ] [ Nem megoldás Megoldás Első példázat a „zenekar”-ról Adalék a mohóság kritériumához:

2005. áprilisMohó algoritmusok 26/70 i tól i ig i [] [] ] [ [] [] ] [ Megoldás Megoldás Első példázat a „zenekar”-ról Adalék a mohóság kritériumához:

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

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

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…

2005. áprilisMohó algoritmusok 30/70 ] ] nini v * =v i vjvj n*n* njnj fjfj f i =f *

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.

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.

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;

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}

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.

2005. áprilisMohó algoritmusok 36/ [] [] [] ][ [] Első példázat a „zenekar”-ról Egy ellen(?)példa:i tól i ig i hihihihi Az adatok:

2005. áprilisMohó algoritmusok 37/ [] [] [] ][ [] Első példázat a „zenekar”-ról i tól i ig i hihihihi Mohón rendezve: S így megoldva: A haszon: =10 … a „leghasznosabb” kimaradt!!!

2005. áprilisMohó algoritmusok 38/ [] [] [] ][ [] Első példázat a „zenekar”-ról i tól i ig i hihihihi – –3+5 Pedig, ha a 2 helyett az 5 -öt tennénk, a haszon: –4+5 =11 lenne, sőt, ha az 1 helyett ten- nénk az 5 -öt, a haszon: –3+5 =12 lenne.

2005. áprilisMohó algoritmusok 39/ [] [] [] ][ [] Első példázat a „zenekar”-ról i tól i ig i hihihihi 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?

2005. áprilisMohó algoritmusok 40/ [] [] [] ][ [] Első példázat a „zenekar”-ról i tól i ig i hihihihi Sajnos nem!!! Lásd az alábbi javítást: 5432 A javítás értéke: =14 Nem találtunk eddig jó mohó szempontot!

2005. áprilisMohó algoritmusok 41/70 Első példázat a „zenekar”-ról i tól i ig i hihihihi 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:

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

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

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

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

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

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

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

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!

[] [] [] ][ [] i tól i ig i Mettől: Második példázat a „fényké- peszkedés”-ről Az ábrázolás magyarázata:

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

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)

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

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- lum­halmazbó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.

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

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?

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

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}

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

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

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é …

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.

2005. áprilisMohó algoritmusok 63/70 Konklúzió? Huffman-kódolás (folytatás) „képregénye”:

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.

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

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

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.

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ó....”

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.

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: