Optimalizációs stratégiák 1.

Hasonló dokumentumok
Optimalizációs stratégiák 2.

Programozási módszertan. Mohó algoritmusok

Visszalépéses keresés

Algoritmizálás, adatmodellezés tanítása 8. előadás

Partíció probléma rekurzíómemorizálással

Fibonacci számok. Dinamikus programozással

B-fa. Felépítés, alapvető műveletek. Programozás II. előadás. Szénási Sándor.

Programozás II. előadás

Algoritmizálás, adatmodellezés tanítása 7. előadás

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

4. Előfeltételek (ha vannak) 4.1 Tantervi Nincs 4.2 Kompetenciabeli Feladatok kijelentéseinek megértése

Programozási segédlet

Számítógép és programozás 2

Dinamikus programozás II.

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Rekurzív algoritmusok

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

Gráfok. Programozás II. előadás. Szénási Sándor.

Programozás alapjai. 6. gyakorlat Futásidő, rekurzió, feladatmegoldás

Algoritmusokfelülnézetből. 1. ELŐADÁS Sapientia-EMTE

Rekurzió. Működése, programtranszformációk. Programozás II. előadás. Szénási Sándor.

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Branch-and-Bound. 1. Az egészértéketű programozás. a korlátozás és szétválasztás módszere Bevezető Definíció. 11.

Programozási módszertan. Dinamikus programozás: szerelőszalag ütemezése Mátrixok véges sorozatainak szorzása

Gráfok 1. Tárolási módok, bejárások. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Programozási módszertan. Függvények rekurzív megadása "Oszd meg és uralkodj" elv, helyettesítő módszer, rekurziós fa módszer, mester módszer

Haladó rendezések. PPT 2007/2008 tavasz.

Algoritmusok, adatszerkezetek, objektumok

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda IRT- 4. kurzus. 3. Előadás: A mohó algoritmus

Hatékonyság 1. előadás

Algoritmusok Tervezése. 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás

Általános algoritmustervezési módszerek

Felvételi tematika INFORMATIKA

angolul: greedy algorithms, románul: algoritmi greedy

Dinamikus programozás párhuzamosítási lehetőségekkel

Mohó algoritmusok. Példa:

Algoritmusok és adatszerkezetek gyakorlat 03 Oszd meg és uralkodj. Nagy

Összetett programozási tételek

A 2008/2009 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1.

Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor

Dinamikus programozás - Szerelőszalag ütemezése

Adatbázis rendszerek Gy: Algoritmusok C-ben

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

A félév során előkerülő témakörök

17. A 2-3 fák és B-fák. 2-3 fák

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Algoritmuselmélet 2. előadás

Hasító táblázatok. Hasító függvények, kulcsütközés kezelése. Programozás II. előadás. Szénási Sándor

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

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Egyszerű programozási tételek

Korlátozás és szétválasztás módszere Holló Csaba 2

Dinamikus programozás vagy Oszd meg, és uralkodj!

Az informatika kulcsfogalmai

Programozási módszertan. Dinamikus programozás: A leghosszabb közös részsorozat

A rész (30 pont) A.1. Vajon mit csinál? (5 pont) A generál(n) algoritmus egy n természetes számot dolgoz fel (0 < n < 100).

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

2017/ Szegedi Tudományegyetem Informatikai Intézet

Programozási tételek. PPT 2007/2008 tavasz.

Rendezések. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar október 24.

Programozás I. zárthelyi dolgozat

Algoritmusok és adatszerkezetek gyakorlat 07

Adatszerkezetek 1. előadás

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Algoritmusok bonyolultsága

Informatikai tehetséggondozás:

Bináris keresőfa. Felépítés, alapvető műveletek. Programozás II. előadás. Szénási Sándor

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Osztott algoritmusok

JAVASLAT A TOP-K ELEMCSERÉK KERESÉSÉRE NAGY ONLINE KÖZÖSSÉGEKBEN

BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli. A versenyzők figyelmébe:

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

11. Előadás. 11. előadás Bevezetés a lineáris programozásba

Egyszerű programozási tételek

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

Java programozási nyelv

Adatszerkezetek II. 6. előadás

Gyakori elemhalmazok kinyerése

A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

Algoritmusok és adatszerkezetek II.

bármely másikra el lehessen jutni. A vállalat tudja, hogy tetszőlegesen adott

Függvények növekedési korlátainak jellemzése

Algoritmuselmélet. Bonyolultságelmélet. Katona Gyula Y.

Algoritmizálás és adatmodellezés tanítása 2. előadás

Az optimális megoldást adó algoritmusok

4. Előfeltételek (ha vannak) 4.1 Tantervi Nincs 4.2 Kompetenciabeli Elemi algoritmusok ismerete

Programozás alapjai II. (7. ea) C++

Keresési algoritmusok, optimalizáció

Diszkrét Irányítások tervezése. Heurisztika Dr. Bécsi Tamás

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Genetikus algoritmusok

2. Visszalépéses keresés

Átírás:

Optimalizációs stratégiák 1. Nyers erő, Oszd meg és uralkodj, Feljegyzéses, Dinamikus, Mohó előadás http://nik.uni-obuda.hu/prog2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar

2 A megoldandó feladat 0-1 hátizsák probléma Bemenete W max : hátizsák mérete N: rendelkezésre álló tárgyak száma w i : i. tárgy súlya p i : i. tárgy értéke Kimenete P max : egy optimális pakolás értéke Pakolás: tárgyanként meghatározzuk, hogy bekerül-e a zsákba vagy sem (pl. N elemű logikai tömb) Pakolás összsúlya/összértéke: a pakolás által a hátizsákba választott tárgyak súlyának/értékének összege Érvényes pakolás: olyan pakolás, amelynek összsúlya nem nagyobb mint a hátizsák mérete Optimális pakolás: olyan érvényes pakolás, amelyiknél nincs nagyobb összértékű érvényes pakolás

Nyers erő módszere Oszd meg és uralkodj Feljegyzéses módszer Dinamikus programozás Mohó algoritmusok Optimalizációs stratégiák 1.

4 Nyers erő módszere (brute force) Alapelv: egyszerűen végigpróbálgatjuk az összes lehetséges megoldást A 0-1 hátizsák probléma megoldása függvény HátizsákBF OPT [hamis,hamis,,hamis] ciklus i 1-től 2 N -1-ig ciklus j 0-től N-1-ig K[j] i / 2 j mod 2 = 1 ciklus vége ha (ÖsszSúly(K) W max ) (ÖsszÉrték(K)>ÖsszÉrték(OPT)) akkor OPT K elágazás vége ciklus vége vissza ÖsszÉrték(OPT) függvény vége Amennyiben érvényes pakolást találunk, akkor ellenőrizzük, hogy jobb-e, mint az eddig talált legjobb Ha igen, akkor ezt követően ezt tekintjük a legjobbnak

5 Nyers erő módszerének értékelése Előnyei Egyszerűen megérthető Egyszerűen implementálható Gyakran csak ez használható Tárhelyigénye nem jelentős Jól párhuzamosítható Hátrányai Futásideje nem kedvező (jelen esetben 2 N lépés)

Nyers erő módszere Oszd meg és uralkodj Feljegyzéses módszer Dinamikus programozás Mohó algoritmusok Optimalizációs stratégiák 1.

7 Oszd meg és uralkodj (divide and conqueror) Programozás I tárgyban már tanult módszer Összefésülő rendezés Quicksort K-adik legkisebb elem kiválasztása Stb. Általában rekurzív megközelítést használ: Amennyiben a megoldandó probléma egyszerű, akkor Megoldás Amennyiben a megoldandó probléma ehhez túl bonyolult, akkor Felosztás több kisebb részproblémára Az így kapott kisebb részproblémák megoldása (tipikusan rekurzív hívás(ok) segítségével) Az így kapott részeredmények egyesítése, azok alapján a megoldandó probléma eredményének előállítása A fenti alapelv optimalizációra is használható

0-1 hátizsák probléma rekurzív megközelítésben Egy részprobléma esetén van t darab tárgyunk (az eredeti feladat 1..t-ig indexű tárgyai) h szabad helyünk (ez értelemszerűen nem nagyobb mint W max ) Rekurzívan megfogalmazva egy optimális pakolás értéke: 0 ha h = 0 0 ha t = 0 F t,h = F t 1,h ha h > 0 t > 0 h < w t max F t 1,h, F t 1,h wt + p t ha h > 0 t > 0 h w t Tehát ha a tárgyak száma vagy a szabad hely 0, akkor az optimális pakolás értéke 0 ha az utolsó tárgy nem fér bele a zsákba, akkor az optimális pakolás értéke annyi, mint amennyi az előtte lévő tárgyakkal elérhető ugyanekkora helyen ha befér, akkor az alábbiak közül a nagyobbik érték az előtte lévő tárgyakkal elérhető optimális érték ugyanekkora helyen (nem rakjuk be) az előtte lévő tárgyakkal elérhető érték az utolsó tárgy méretével csökkentett helyen + az utolsó tárgy értéke (berakjuk) szenasi.sandor@nik.uni-obuda.hu 8

0-1 hátizsák probléma megoldása oszd meg és uralkodj módszerrel szenasi.sandor@nik.uni-obuda.hu 9 függvény LegjobbRészMegoldás(t, h) ha (t = 0) (h = 0) akkor vissza 0 különben P nem LegjobbRészMegoldás(t-1, h) ha h w t akkor P igen p t + LegjobbRészMegoldás(t-1, h-w t ) P opt max(p igen, P nem ) különben P opt P nem elágazás vége vissza P opt elágazás vége függvény vége függvény HátizsákDnC vissza LegjobbRészMegoldás(N, W max ) függvény vége

10 Az oszd meg és uralkodj módszer értékelése Előnyei A keresés jobban irányítható mint az előző esetben, nem vizsgál meg eleve reménytelen útvonalakat Gyakran nagyon jól párhuzamosítható A lépésszáma alacsonyabb lehet mint a nyers erő módszer esetén Hátrányai Csak bizonyos szerkezetű megoldásoknál hatékony ez a technika Amennyiben az egyes részproblémák egymást átfedik, akkor nagyon sok felesleges számítást végez. Lásd Fibonacci számok rekurzív számítása

Nyers erő módszere Oszd meg és uralkodj Feljegyzéses módszer Dinamikus programozás Mohó algoritmusok Optimalizációs stratégiák 1.

Feljegyzéses módszer (Memoization) Oszd meg és uralkodj módszert így szeretjük elképzelni A valóságban azonban gyakran inkább így néz ki A részproblémák gyakran átfedik egymást: A részproblémákra bontásnál nem foglalkoztunk azzal, hogy esetleg ugyanazt a részproblémát többször is megkapjuk Ha már úgy alakult, hogy ugyanazt a problémát többször kell megoldani, akkor nem használjuk fel az előző megoldás eredményeit A futásidő tehát jelentősen javítható egy egyszerű módszerrel: A már kiszámított részeredményeket tároljuk el valahogy Ha egy már megoldott részproblémához jutunk újra, akkor használjuk ezeket szenasi.sandor@nik.uni-obuda.hu 12

0-1 hátizsák probléma megoldása feljegyzéses módszer -rel szenasi.sandor@nik.uni-obuda.hu 13 függvény LegjobbRészMegoldás(t, h) ha (t = 0) (h = 0) akkor vissza 0 különben ha RészMegoldásTárolóbanKeres([t, h]) akkor vissza RészMegoldásTárolóbanKeres([t, h]) különben P nem LegjobbRészMegoldás(t-1, h) ha h w t akkor P igen p t + LegjobbRészMegoldás(t-1, h-w t ) P opt max(p igen, P nem ) különben P opt P nem elágazás vége RészMegoldásTárolóbaFeljegyez([t, h], P opt ) vissza P opt elágazás vége elágazás vége függvény vége függvény HátizsákMemo vissza LegjobbRészMegoldás(N, W max ) függvény vége

14 A feljegyzéses módszer értékelése Előnyei A megoldás alapelve pontosan ugyanaz, mint az oszd meg és uralkodj módszer esetében, ezért azt nem is vizsgáltuk meg újra Jelentősen tudja csökkenteni a lépésszámot, ha sok egymást átfedő részproblémát kell megoldani Egyszerűen implementálható. A pontos feladat ismerete nélkül is adható egy általános séma a használatára (persze annak hatékonysága előre nem tudható) Hátrányai Csak bizonyos szerkezetű megoldásoknál hatékony ez a technika Jelentős többlet tárhelyigényt jelent Tulajdonképpen jobb futásidőt kapunk nagyobb tárhelyért cserébe Kiegészítés Amennyiben a triviális megoldások száma véges (és kevés), akkor azt is megtehetjük, hogy ezeket már a rekurzió hívása előtt betöltjük a részmegoldás tárolóba. Ilyenkor a triviális megoldás ellenőrzés el is hagyható a rekurzív algoritmusból

Nyers erő módszere Oszd meg és uralkodj Feljegyzéses módszer Dinamikus programozás Mohó algoritmusok Optimalizációs stratégiák 1.

16 Dinamikus programozás alapjai Az oszd meg és uralkodj módszer felülről lefelé haladva próbálja megoldani a feladatot: A komplex problémát felbontja kisebb részproblémákra Majd ezek megoldása alapján adja meg az összetett probléma megoldását A gyakorlatban a rekurzív függvény először csak hívogatja magát, amíg el nem jut valamelyik triviális megoldásig. Ezt követően ez alapján elkezdi el felépíteni a teljes megoldást A feljegyzéses módszer esetében ez jól látható, ha megvizsgáljuk, hogy a részmegoldás tárolóba milyen sorrendbe érkeznek az adatok. Először a legegyszerűbb részproblémák adatai kerülnek bele, majd ezek alapján épülnek fel a komplexebb részproblémák eredményei A fentiek alapján próbáljuk meg eleve ezt az alulról felfelé való építkezést megvalósítani. Egy tárhelyen tároljuk el a triviális megoldásokat, majd ezek alapján kezdjük el felépíteni az egyre összetettebbeket, amíg el nem jutunk a teljes probléma megoldásáig

17 Hátizsákpakolási feladat megoldása Az algoritmus egy T tömböt tölt fel ennek mérete (N+1) (W max +1) T[t,h] értéke azt mutatja, hogy az első t darab tárgy elhelyezése h szabad helyre milyen optimális pakolási összértékkel járhat A feltöltés menete Triviális esetek előre beírhatók a tömbbe: ha nincs szabad hely, az érték 0 ha nincs tárgy, az érték 0 Ezt követően a már megismert képlettel feltöltjük a többi elemet Mivel a rekurzív képlet a T(t,h) elem kiszámításához csak a t-nél és h- nál kisebb elemeket igényli, így könnyen belátható, hogy a táblázat T[t,h] elemének kiszámításához a t-t és h-t növelő ciklusok mindig már ismert részeredményeket fognak csak felhasználni Így nincs szükség rekurzióra, a feltöltés egyszerűen megoldható A feltöltött táblázat T[N, W max ] eleme tartalmazza a teljes feladat megoldását (tehát egy optimális pakolás értékét)

0-1 hátizsák probléma megoldása dinamikus programozás -sal szenasi.sandor@nik.uni-obuda.hu 18 függvény HátizsákDP ciklus t 0-tól N-ig F[t,0] 0 ciklus vége ciklus h 1-től W max -ig F[0,h] 0 ciklus vége ciklus t 1-től N-ig ciklus h 1-től W max -ig ha h w t akkor F[t,h] max(f[t-1,h], F[t-1,h-w t ] + p t ) különben F[t,h] F[t-1,h] elágazás vége ciklus vége ciklus vége vissza F[N,W max ] függvény vége Megjegyzés: a tömböket kivételesen 0-tól indexeljük

19 0-1 hátizsák probléma megoldásának előállítása Egy optimális pakolást állít elő az alábbi algoritmus: függvény HátizsákDPEredmény(F) OPT [hamis,hamis,,hamis] t N h W max ciklus amíg (t > 0) (h > 0) ha F[t,h] F[t-1,h] akkor OPT[t] igaz h h - w j elágazás vége t t - 1 ciklus vége vissza OPT függvény vége Elindulunk a (t=n, h=w max ) elemtől, majd Ha F[t,h] = F[t-1,h] az azt jelenti, hogy a t. elem nincs benne a zsákban (hiszen ugyanakkora helyen nélküle ugyanakkora az optimális pakolás értéke) Ha a két érték nem egyezik, akkor a t. elem benne van a zsákban Ezt követően vizsgáljuk a megelőző tárgyakból elérhető optimális pakolást (a fentiek alapján korrigált szabad hellyel)

20 A dinamikus programozás módszere általánosan A módszer hatékony használatának előkövetelményei: A feladat legyen optimális részstruktúrájú: a feladat optimális megoldása önmagán belül a részfeladatok optimális megoldásait is tartalmazza Legyenek a részfeladatok átfedőek: a részfeladatokra bontás során többször is merüljön fel ugyanannak a részfeladatnak a megoldása A módszerrel minden, a fenti feltételeknek megfelelő probléma egyszerűen megoldható Amennyiben ezek teljesülnek, a megoldás lépései: Az optimális megoldás szerkezetének jellemzése A megoldás értékének (jóságának) rekurzív módon való definiálása Az optimális megoldás értékének (jóságának) kiszámítása alulról felfelé történő módon Amennyiben szükséges, magának az optimális megoldásnak a magadása Az utolsó lépés csak akkor szükséges, ha nem elég egy optimális megoldás értéke, hanem magát a megoldást is tudni szeretnénk

21 A dinamikus programozás értékelése Előnyei Futásideje általában kedvező Nincs szükség egy részprobléma többszöri megoldására Nem rekurzív Minden, az előfeltételeknek megfelelő feladat megoldható vele Tárigénye és lépésszáma előre tudható Hátrányai Az alulról felfelé való megoldás miatt néha felesleges részproblémákat is megold A többi megoldáshoz viszonyítva a tárigénye magasabb lehet Megjegyzés A tárigény csökkenthető, ha a már szükségtelen részmegoldások eredményeit töröljük (hátizsáknál pl. mindig csak az előző sorra van szükségünk) További klasszikus dinamikus programozáson alapuló megoldások: Mátrixok láncszorzása Leghosszabb közös részsorozat Stb.

Nyers erő módszere Oszd meg és uralkodj Feljegyzéses módszer Dinamikus programozás Mohó algoritmusok Optimalizációs stratégiák 1.

23 Mohó algoritmusok Mohó algoritmus: a feladat megoldása során felmerülő részproblémák megoldásakor mindig az aktuálisan legjobbnak tűnő részeredményt választja Legjobbnak tűnő: a rendelkezésre álló (általában hiányos) információk alapján próbálja megbecsülni, hogy mit érdemes választani. Ebből adódóan a futásideje általában nagyon jó A mohó stratégia általában az alábbi két előfeltételt igényli Optimális részproblémák: az optimális megoldás felépíthető a részproblémák optimális megoldásából Mohó választás: a globális optimális megoldás elérhető lokális optimumok választásán keresztül Mohó algoritmusok típusai Az előzőeknek megfelelő problémák esetén mindig optimális megoldást ad Bizonyos feladatoknál nem mindig ad optimális megoldást, csak egy közel optimálisat (bár általában itt is bizonyítható, hogy ez mennyire van közel az optimálishoz)

24 0-1 hátizsák probléma megoldása mohó algoritmussal Egy közel optimális pakolást állít elő az alábbi algoritmus: függvény HátizsákMohó TárgyakRendezése(w, p) OPT [hamis,hamis,,hamis] t 1 ciklus amíg (ÖsszSúly(OPT) < W max ) (t N) ha ÖsszSúly(OPT) + w t W max akkor OPT[t] igaz elágazás vége t t + 1 ciklus vége vissza ÖsszÉrték(OPT) függvény vége Először rendezzük a tárgyakat valamilyen szempont szerint, pl. Súly szerint növekvő sorrend Érték szerint csökkenő sorrend Érték/súly szerint csökkenő sorrend Ezt követően a fenti sorrendben kezdjük vizsgálni a tárgyakat Ha még belefér a zsákba, akkor belerakjuk, egyébként nem Megállunk ha tele a zsák, vagy elfogytak a tárgyak

25 A mohó módszer értékelése Előnyei Futásideje nagyon jó (gyakran lineáris) Ha nem ad optimális megoldást, akkor is egy közel optimálisat nyújt (ez alapja lehet egy másik, lassabb de pontosabb módszernek) Hátrányai Csak a feladatok egy szűk körénél használható Megjegyzés A 0-1 hátizsákproblémára nem ismert mohó algoritmus, a töredékes hátizsákproblémára (amikor egy tárgy egy részét is berakhatjuk a zsákba) viszont könnyen belátható, hogy működik az általunk megadott módszer a harmadik rendezést használva A későbbiek során még számos mohó algoritmussal találkozunk, amelyek bizonyítottan mindig optimális megoldást adnak Dijkstra algoritmusa Prim algoritmusa Kruskal algoritmusa Stb.

26 Irodalomjegyzék Javasolt/felhasznált irodalom Rónyai, Ivanyos, Szabó: Algoritmusok, Typotex, 2005 Cormen, Leiserson, Rivest: Algoritmusok, Műszaki Könyvkiadó, 1997 Mehlhorn, Sanders: Algorithms and Data Structures, Springer, 2008 Skiena: The Algorithm Design Manual, Springer, 2008 Szénási: Algoritmusok, adatszerkezetek II., Óbudai Egyetem, 2014