1 / 58

Mohó algoritmusok

Mohó algoritmusok. Szlávi Péter ELTE IK szlavip@elte.hu.  „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ó?

zuriel
Download Presentation

Mohó algoritmusok

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. „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ó? Komolytalan befejezés, ha még nem lenne elég a jókedv Megpróbáltatások Mohó algoritmusok

  3. „A mohóság dicsérete” – bevezetés • 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 • Válasszuk mindig a legjobbnak tetszőt (a lokális optimumot) • Lehet, hogy ez globális optimum? Be kell látni! egy kis kalandozás a Carpe diem! nyomán Mohó algoritmusok

  4. 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 • Minden esemény ideje: [ki,vi) • i,j kompatibilisek  [ki,vi)[kj,vj)= Kimenet: • M={e1,e2…eDb} eiE • M maximális elemszámú • ei-k páronként kompatibilisek Mohó algoritmusok

  5. [ ) [ [ ) [ ) ) [ ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” Próbálkozzunk egy példával! S egy kézenfekvő megoldás-ötlettel: a backtrack-kel! Rajzoljunk! Mohó algoritmusok

  6. [ ) [ [ ) [ ) ) [ ) Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” Választási lehetőségek: • [1,15)  Db=1 • [3,6)  [7,12)  Db=2  [9,17)  Db=2 • [7,12) ilyen már volt  Db=1 • [5,11)  Db=1 • [9,17) ilyen már volt  Db=1 Mohó algoritmusok

  7. Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” Megoldás józanésszel1: • Eseményenként döntsünk arról, hogy bevesszük vagy nem! Bevehető, ha „kompatibilis” az ed-digiekkel. • 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! Mohó algoritmusok

  8. Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” Megoldás józanésszel2: • Eseményenként döntsünk arról, hogy bevesszük vagy nem! Bevehető, ha „kompatibilis” az ed-digiekkel. • 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? Mohó algoritmusok

  9. [ [ ) ) [ [ [ [ ) ) [ [ ) ) ) ) [ [ ) ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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: Mohó algoritmusok

  10. 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={e1,e2,…,eu}, ei<ei+1megoldás is, optimális is! Rendezés  v1vi  {1,e2,…,eu} is… az optimális megoldás kezdődhet a mohón választottal. Legyen E’={i | v1ki i=2..n} ésM’ 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. Mohó algoritmusok

  11. 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: • egy „naiv” megoldás • egy backtrack megoldás, és • egy mohó esetében. Mohó algoritmusok

  12. 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: i2-nel arányos. Összesen: Mohó algoritmusok

  13. 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: i2-nel arányos. Összesen: (Pl. n=9-re 6912 és 20736 közötti!) 2005. április Mohó algoritmusok 14/70

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

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

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

  17. Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A backtrack-es változat („empirikusan”): Próbáljuk ki és következtessünk! Zip, exe. Mohó algoritmusok

  18. Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A mohó változat (kódja): Mohó algoritmusok

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

  20. Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A mohó változat („empirikusan”): Próbáljuk ki és következtessünk! Zip, exe. Kimond-hatjuk: megéri!!! Mohó algoritmusok

  21. Egy gondolatébresztő példa – a mohó algoritmusok „szókincse” A mohó megoldás sablonja: • Lépésekre bontjuk az eljárásunkat. • Keresünk egy adott lépésnél eldönthető, lokálisan optimális kritériumot (mohó választás). • belátjuk a mohóság működését: • van-e optimális megoldás, ami mohó választással kezdődik? • 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? • Algoritmizáljuk a mohó megoldást. „mohó választási tulajdonság” „optimális részproblémák tulajdonság” Mohó algoritmusok

  22. 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!” Mohó algoritmusok

  23. 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 • Mohó választás – kettős probléma: • ajánlat-intervallum, • intervallumbeli nap; stratégia: a leghamarabb lezáruló, legkorábbi napja… miért? L. példákat. Mohó algoritmusok

  24. Első példázat a „zenekar”-ról A megoldás (folytatás): Belátás: Nap={1,…,NapDb} – a választható napok sor-számai Fl={1,…,FlDb} – a fellépések sorszámai ki,vi iFl – az i. fellépés kezdő, ill. végső nap-sorszáma NF={(n1,f1),…,(nDb,fDb)}, ninj, fifj(ij), ni[kfi,vfi], fiFl i,j=1..Db – a megoldás NF optimális megoldás 2005. április Mohó algoritmusok 27/70

  25. Első példázat a „zenekar”-ról Def. (fellépések rendezése) f,f’Fl, f<ff’ (f „kisebb/előbbi”, mint f’), acsa • vf<vf’ (előbb ér véget) vagy • vf=vf’ és kf<kf’ (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 • f*=Min<f {fFl’ | [kf..vf]Sz} – a „legko-rábbi” fellépés, amely még elvállalható • n*=Min {nSz | n[kf*..vf*]Sz} – a „legko-rábbi” fellépés legkorábbi napján Mohó algoritmusok

  26. 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*),(n2,f2),..,(nDb,fDb)} is op-timális megoldás. Bizonyítás: NF opt.mo. és (n*,f*) mohó választás, de (_,f*)NF  (ni,fi): ni=n*(különben ellentmondásra jutnánk NF optimalitásával) Helyettesítsük NF-ben (ni,fi)-t (n*,f*)-gal: NF’={(n1,f1),…,(ni-1,fi-1),(n*,f*),(ni+1,fi+1),…,(nDb,fDb)}  NF’ megoldás is és optimális is Sorszámozzuk újra az NF’-t f-szerinti sorrendben: NF*={(n*,f*),(n2,f2),..,(nDb,fDb)}  NF*megoldás; NF optimális és ║NF║=║NF*║ NF*optimális. … kicsit hosszadalmasabban a (_,f*)NF –re is… Mohó algoritmusok

  27. Első példázat a „zenekar”-ról Z2. Állítás (optimális részproblémák tulaj-donság): Ha • SzNap „szabad” napok, • (n*,f*) mohó választás Sz mellett és • 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  (ni,fi)NF* : n*ni  (n*,f*)NF*megoldása lesz az Sz-nek. Mohó algoritmusok

  28. 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. Mohó algoritmusok

  29. Első példázat a „zenekar”-ról A megvalósítá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] ofRecord k,v,s:Byte; end; {fellépés: kezdet/vég/sorsz.}End;TNapok=Setof 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; Mohó algoritmusok

  30. Első példázat a „zenekar”-ról A megvalósítás: • 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 doBegin OK:=VallalhatoE(i); If OK.igaz thenBegin 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} Mohó algoritmusok

  31. 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 (hi) 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. Mohó algoritmusok

  32. [ ] [ ] [ ] [ ] [ ] Első példázat a „zenekar”-ról Egy ellen(?)példa: Az adatok: Mohó algoritmusok

  33. [ ] [ ] [ ] [ ] [ ] Első példázat a „zenekar”-ról Mohón rendezve: S így megoldva: A haszon: 1+2+3+4=10 … a „leghasznosabb” kimaradt!!! Mohó algoritmusok

  34. [ ] [ ] [ ] [ ] [ ] Első példázat a „zenekar”-ról 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. Mohó algoritmusok

  35. [ ] [ ] [ ] [ ] [ ] Első példázat a „zenekar”-ról 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? Mohó algoritmusok

  36. [ ] [ ] [ ] [ ] [ ] Első példázat a „zenekar”-ról Sajnos nem!!! Lásd az alábbi javítást: A javítás értéke: 5+4+3+2=14 Nem találtunk eddig jó mohó szempontot! Mohó algoritmusok

  37. Első példázat a „zenekar”-ról 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: Mohó algoritmusok

  38. 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!” Mohó algoritmusok

  39. Második példázat a „fényké-peszkedés”-ről A megoldás: • Lépésekre bontás – a vendégekkö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 • Belátás: • V = {v1,…,vvDb}, ahol vi = (tóli,igi) (i=1..vDb) – a vendégek ott tartózkodása • FT = {ft1,…,ftftDb}, ahol fti<fti+1 (i=1..ftDb-1) – a megoldás • FT optimális megoldás Mohó algoritmusok

  40. Második példázat a „fényké-peszkedés”-ről Def. (vendégek rendezése) vi,vjV, viig vj („kisebb/előbbi”), acsa vi.igvj.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, haft*=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 Mohó algoritmusok

  41. Második példázat a „fényké-peszkedés”-ről F1. Állítás (mohó választási tulajdonság): Ha FT = {ft1,ft2,…,ftftDb} optimális megoldás és ft*mohó választás, akkor FT* = {ft*,ft2,...,ftftDb} is optimális megoldás. Bizonyítás: Ha ft1ft*, akkor ft*-ig nincs távozás  ft1 helyett ft* is jó Így FT megoldás volt  FT*megoldás volta FT optimalitása  FT*optimalitása. Az ft1>ft* nem lehetséges, mivel ekkor az első vendégről nem készülhetett fotó (ft*=v1.ig<ft1)FT nem lehet megoldás, ami ellentmon-dás. Mohó algoritmusok

  42. Második példázat a „fényké-peszkedés”-ről Jelölés:FTW={ft1,…,ftk}, W-ben szereplő ven-dégekre optimális megoldás. F2. Állítás (optimális részproblémák tulaj-donság): Ha • ft* mohó választás és • FTW = {ft2,...,ftftDb} optimális megoldás aW={vi | vi.tól>ft*} esetén, akkor FTV = {ft*,ft2,..,ftftDb} optimális megoldás (azaz a teljes V esetén optimális megoldás). Mohó algoritmusok

  43. Második példázat a „fényké-peszkedés”-ről Bizonyítás: FTVmegoldás? • FTW megoldás W-re  minden vendégről, aki ft* után érkezett (ft*<vi.tól), készült fénykép • ft* értelmezése ft*-ig érkezetteket ft*-kor fényképezték le 1. & 2.  FTVmegoldás Mohó algoritmusok

  44. Második példázat a „fényké-peszkedés”-ről (Bizonyítás folytatása) FTVoptimális? (indirekt) Tfh FTV nem optimális megoldás, azaz 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 FTW-nél. Ez ellentmondás. Mohó algoritmusok

  45. Második példázat a „fényké-peszkedés”-ről A megvalósítá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} A távozás előtt készüljön a fénykép! Mohó algoritmusok

  46. Második példázat a „fényké-peszkedés”-ről A megvalósítás: • 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 DoBeginIf (Mettol[t]>0)and(Utolso<Mettol[t]) ThenBegin 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 Mohó algoritmusok

  47. Második példázat a „fényké-peszkedés”-ről • 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 doBegin 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) Mohó algoritmusok

  48. 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!” Mohó algoritmusok

  49. 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. Ezért az elemzéstől most eltekinthetünk. Mohó algoritmusok

  50. Harmadik példázat a „ültetés”-ről A megvalósítás: • adatleírás ConstMaxN=1000; {a megrendelések max. száma}MaxM=10000; {az ülőhelyek max. száma} TypeTMegrendelesek=Array [1..MaxN] ofRecord 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} Mohó algoritmusok

More Related