Algoritmusok és Adatszerkezetek I.

Slides:



Advertisements
Hasonló előadás
A Floyd-Warshall algoritmus
Advertisements

A Szállítási feladat megoldása
Készítette: Kosztyán Zsolt Tibor
Adatelemzés számítógéppel
Programozási tételek, és „négyzetes” rendezések
Állóeszköz-gazdálkodás
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
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.
Illés Tibor – Hálózati folyamok
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,
Csoport részcsoport invariáns faktorcsoport részcsoport
4. VÉGES HALMAZOK 4.1 Alaptulajdonságok
Hatékony gyorsítótár használata legrövidebb utak kereséséhez Bodnár István, Fodor Krisztián, Gyimesi Gábor Jeppe Rishede Thomsen, Man Lung Yiu, Christian.
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,
Gazdaságmatematika 6.szeminárium.
Minimax és problémaredukció, egyszerű példák INCK431 Előadó: Dr. Nagy Benedek Norbert Gyakorlatvezető: Kovács Zita 2011/2012. II. félév A MESTERSÉGES INTELLIGENCIA.
Készítette: Pető László
Szállítási feladatok Optimalitás vizsgálat
Java programozási nyelv 2. rész – Vezérlő szerkezetek
Papp Róbert, Blaskovics Viktor, Hantos Norbert
Lineáris programozás Modellalkotás Grafikus megoldás Feladattípusok
OPERÁCIÓKUTATÁS Kalmár János, 2012 Tartalom A nulla-egy LP megoldása Hátizsák feladat.
Programozó matematikus szak 2003/2004-es tanév II. félév
A digitális számítás elmélete
6. SZÁMELMÉLET 6.1. Oszthatóság
Megvalósíthatóság és költségelemzés Készítette: Horváth László Kádár Zsolt.
Hálózati architektúrák
Az oszd meg és uralkodj (Divide et Impera) programozási módszer
Lénárt Szabolcs Páll Boglárka
Tömbök és programozási tételek
Matematika II. 1. előadás Geodézia szakmérnöki szak 2010/2011. tanév Kataszteri ágazat tavaszi félév.
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.
A Dijkstra algoritmus.
Rendszerek stabilitása
Dinamikus programozás
Algoritmizálás, adatmodellezés tanítása 8. előadás.
Dr. Bánkuti Gyöngyi Klingné Takács Anna
Fejlett elemzési és tervezési módszerek
Business Mathematics A legrövidebb út.
Mohó algoritmusok Szlávi Péter ELTE IK
T.5. tétel (minimálpolinom egyértelmű létezése)
Diszjunkt halmazok adatszerkezete A diszjunkt halmaz adatszerkezet diszjunkt dinamikus halmazok S={S 1,…,S n } halmaza. Egy halmazt egy képviselője azonosít.
Készítette: Mátyás István agrár mérnöktanár szakos hallgató,
Struktúra predikció Struktúra lehet Felügyelt tanulási probléma
Automatikus fizikai tervezési javaslatok XML adatbázisokhoz Balogh Bernadett Kresz Marcell Cseh Tamás.
OPERÁCIÓKUTATÁS TÖBBCÉLÚ PROGRAMOZÁS. Operáció kutatás Több célú programozás A * x  b C T * x = max, ahol x  0. Alap összefüggés: C T 1 * x = max C.
Megerősítéses tanulás 5. előadás
Kvantitatív módszerek
HÁLÓZAT Maximális folyam, minimális vágás
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Technológiai folyamatok optimalizálása Dinamikus programozás Ráduly Botond Mészáros Sándor.
A Dijkstra algoritmus.
Nevezetes algoritmusok
HÁLÓZAT Maximális folyam, minimális vágás
Mediánok és rendezett minták
Algoritmusok és Adatszerkezetek I.
Algoritmusok és Adatszerkezetek I.
Algoritmusok és Adatszerkezetek I.
Informatikai gyakorlatok 11. évfolyam
Emlékeztető Az előző órán az adatok eloszlását Gauss-eloszlással közelítettük Célfüggvénynek a Maximum Likelihood kritériumot használtuk A paramétereket.
Depth First Search Backtracking
Dijkstra algoritmusa: legrövidebb utak
Dijkstra algoritmusa: legrövidebb utak
Dijkstra algoritmusa: legrövidebb utak
Algoritmusok és Adatszerkezetek I.
Algoritmusok és Adatszerkezetek I.
Algoritmusok és Adatszerkezetek I.
Algoritmusok és Adatszerkezetek I.
Előadás másolata:

Algoritmusok és Adatszerkezetek I. Dinamikus programozás 2018. szeptember 18.

Pénzváltási feladat Feladat: Adott P1,P2, …Pn típusú pénzérmék (mindegyikből végtelen darabszámú áll rendelkezésre) mellett a lehető legkevesebb érmét használva hogyan fizethető ki F forint? Ha nem fizethető ki pontosan, a kimenet legyen -1.

Pénzváltási feladat P1=1, P2=5, P3=10, P4=25, P5=50 F=40 optimális megoldás: 25+10+5 (3db) Példák forrása: Coursera, Algorithmic Toolbox by University of California, San Diego & Higher School of Economics

Pénzváltási feladat P1=1, P2=5, P3=10, P4=20, P5=25, P6=50 F=40 optimális megoldás: 20+20 (2db)

Optimalizálási feladat Sok megengedett megoldása lehet. Mindegyiknek van értéke, és mi az optimális (minimális vagy maximális) értékűt kívánjuk megtalálni. Megj: egy ilyen megoldást egy optimális megoldásnak nevezzük, nem pedig az optimális megoldásnak, mivel más megoldások is elérhetik az optimális értéket.

Pénzváltási feladat Helyes? Egyszerű (mohó) megoldás: Mindig vegyük a legnagyobb pénzérmét ami még használható (nem lépjük túl a fizetendő összeget). P1=1, P2=5, P3=10, P4=20, P5=25, P6=50 F=40 Egyszerű algoritmus kimenete: 25+10+5 Helyes?

Pénzváltási feladat Helyes? Nyers erő módszerrel (brute force): Soroljunk fel minden kombinációt, ahol az érmék összege F és ezek közül válasszunk egyet ahol a felhasznált érmék száma minimális. Helyes, de nagyon lassú: O(Fn) Helyes?

Pénzváltási feladat – rekurzív megoldás Bontsuk részproblémákra! P1=1, P2=5, P3=6, F=9 minPenz(8)+1 minPenz(9)=min minPenz(4)+1 minPenz(3)+1

Pénzváltási feladat – rekurzív megoldás PenzValtas(F,P) m ← ∞ for i ← 1 to n m ← min(m, PenzValtas( F – Pi )) return m + 1

Pénzváltási feladat – rekurzív megoldás Ez oszd-meg-és-urlakodj? minPenz(8)+1 minPenz(9)=min minPenz(4)+1 minPenz(3)+1 minPenz(7)+1 minPenz(8)=min minPenz(3)+1 minPenz(2)+1

Pénzváltási feladat – rekurzív megoldás P1=1, P2=5, P3=6, F=9 9 8 4 3 7 3 2 3 2 6 2 1 2 1 2 1 1 1 1

Pénzváltási feladat – rekurzív megoldás P1=1, P2=5, P3=6, F=9 9 8 4 3 7 3 2 3 2 6 2 1 2 1 2 1 1 1 1 sejtés: O(nF)

Dinamikus Programozás (DP) Részfeladatokra való bontással oldjuk meg a problémát. DP – és nem oszd-meg-és-uralkodj – ha a részproblémák nem függetlenek, azaz közös részproblémáik vannak (optimalizálási feladatoknál tipikus!). Alapgondolat: a már megoldott részproblémák optimális megoldásának értékét memorizáljuk és ha még egyszer fel kell használni felidézzük

Dinamikus Programozás (DP) DP minden egyes részfeladatot és annak minden részfeladatát pontosan egyszer oldja meg, az eredményt egy táblázatban tárolja, és ezáltal elkerüli az ismételt számítást, ha a részfeladat megint felmerül.

dinamikus programozási megoldás Pénzváltási feladat – dinamikus programozási megoldás minPenz[0] ← 0 for p ← 1 to F minPenz[p] ← ∞ for j ← 1 to n if p ≥ Pj minPenz[p] ← min(minPenz[p], minPenz[p- Pj]+1) return minPenz[F] futásidő: O(Fn)

Dinamikus Programozás Iteratív megvalósítás (táblázatkitöltés): Minden részmegoldást kiszámolunk Alulról felfele (bottom-up) építkezünk Rekurzív megvalósítás memorizálással: Részmegoldásokat kulcs-érték formájában tároljuk (feljegyzéses módszer) Felülről lefele (top-down) építkezünk Csak akkor használjuk ha nem kell minden megoldást kiszámolni! (pl. minden érme 10 többszöröse)

Dinamikus Programozás P1=1, P2=5, P3=6, F=9 Rekurzív megvalósítás memorizálással: Iteratív megvalósítás (táblázatkitöltés): 1 2 3 4 5 6 7 8 9 ? 1 ? ? 2 3 ? 4 ? 1 ? 2 ? ? 3 4 ? 1 2 3 4 5 6 7 8 9 1 2 3 4 1 1 2 3 4

TV reklámidő feltöltés: Válasszuk ki a reklámok egy halmazát (mindegyiknek van költsége és ideje) úgy, hogy maximalizáljuk a bevételt, de az összidő beleférjen a keretbe Szerverpark kiépítés: Vásároljunk gépeket egy költségvetésből, úgy hogy az összteljesítmény maximális legyen

Hátizsák probléma Adott egy hátizsák kapacitása és n tárgy, mindegyik értékkel és súllyal megadva. Mekkora a legnagyobb összérték amit a hátizsákba tehetünk?

Hátizsák probléma Tfh. tárgyak nem darabolhatóak Két különböző feladat: minden tárgyból pontosan 1db van a tárgyakat lehet (tetszőleges számban) ismételni

Hátizsák ismétlődő tárgyakkal Bemenet: hátizsák S kapacitása n tárgy, amelyek súlyát S1,…,Sn ill. értékét E1,…,En jelöli Kimenet: Tárgyakat nem darabolva, minden tárgy tetszőleges számban rendelkezésre állva, mi a legnagyobb ∑E ami S kapacitásba belefér

Hátizsák ismétlődő tárgyakkal Részfeladatra bontás: vegyünk az optimális megoldást valamely s kapacitásra ha valamely i tárgyat kivesszük az optimális megoldásból egy (s-Si)-re optimális megoldáshoz jutunk ertek(s)=max(ertek(s-Si)+Ei)

Hátizsák ismétlődő tárgyakkal ertek[0] ← 0 for s ← 1 to S ertek[s] ← 0 for j ← 1 to n if s ≥ Sj ertek[s] ← max( ertek[s], ertek[s- Sj] + Ej ) return ertek[S] futásidő: O(Sn)

Hátizsák ismétlődő tárgyakkal - példa 1 2 3 4 Si 6 Ei 30 14 16 9 S=10 1 2 3 4 5 6 7 8 9 10 9 14 18 23 30 32 39 44 48

Hátizsák ismétlődés nélkül Lehetséges megoldások száma: 2n Ismétlődéses variáns részproblémára bontása nem működik! Ha egy optimális megoldásból kiveszünk egy tárgyat a megmaradt kapacitásra nem biztos, hogy optimális megoldás összeállítható s-Si értékkel (pl. elöző példa S=10 és S=8 esete)

Hátizsák ismétlődés nélkül Részproblémára bontás: vegyünk az optimális megoldást valamely s kapacitásra ha az n. tárgy része az optimális megoldásnak akkor (s-Sn)-re optimális megoldáshoz jutunk 1..(n-1) tárgyak felhasználásával egyébként s-re optimális megoldás kapható 1..(n-1) tárgyak felhasználása ertek(s,i)=max(ertek(s-Si,i-1)+Ei, ertek(s,i-1))

Hátizsák ismétlődés nélkül for s ← 0 to S ertek[s,0] ← 0 for j ← 1 to n ertek[0,j] ← 0 for s ← 1 to S ertek[s, j ] ← ertek[s, j-1] if s ≥ Sj ertek[s, j ] ← max( ertek[s, j-1], ertek[s- Sj , j-1] + Ej) return ertek[S,n] futásidő: O(Sn)

Hátizsák ismétlődés nélkül 1 2 3 4 Si 6 Ei 30 14 16 9 S=10 1 2 3 4 5 6 7 8 9 10

Hátizsák ismétlődés nélkül 1 2 3 4 Si 6 Ei 30 14 16 9 S=10 1 2 3 4 5 6 7 8 9 10

Hátizsák ismétlődés nélkül 1 2 3 4 Si 6 Ei 30 14 16 9 S=10 1 2 3 4 5 6 7 8 9 10

Hátizsák ismétlődés nélkül 1 2 3 4 Si 6 Ei 30 14 16 9 S=10 1 2 3 4 5 6 7 8 9 10 30

Hátizsák ismétlődés nélkül 1 2 3 4 Si 6 Ei 30 14 16 9 S=10 1 2 3 4 5 6 7 8 9 10 30 14 44

Hátizsák ismétlődés nélkül 1 2 3 4 Si 6 Ei 30 14 16 9 S=10 1 2 3 4 5 6 7 8 9 10 30 14 44 16 46 23 39 1 2 3 4 Optimális megoldás megszerkesztése: 1 1

Dinamikus Programozás elemei DP alkalmazásához szükséges tulajdonságok: Optimális részstruktúra Átfedő részfeladatok Egy optimális megoldás megszerkesztése

Optimális részstruktúra Egy feladat optimális részstruktúrájú, ha a probléma egy optimális megoldása önmagán belül a részfeladatok optimális megoldásait tartalmazza. Biztosítanunk kell, hogy a részfeladatok általunk vizsgált halmaza tartalmazza azokat, amelyekből az optimális megoldás áll.

Átfedő részfeladatok A részfeladatok halmaza ”kicsi” legyen abban az értelemben, hogy a probléma rekurzív algoritmusa ismételten ugyanazokat a részfeladatokat oldja meg ahelyett, hogy mindig új részfeladatot állítana elő.

Egy optimális megoldás előállítása Mindig a teljes megoldásból visszafejtéssel Megjegyezhetjük, hogy melyik döntéssel jutottunk az aktuális részmegoldáshoz (backpointerek) VAGY minden részmegoldásnál újra kiszámoljuk, hogy melyik részmegoldásból jutottunk ide

Tár-idő átváltás Nagyon sok esetben adható az algorimtusnak egy módosított változata ami kevessebb/több futásidőt igényel aminek ára a nagyobb/kisebb tár (trade-off) Az egész DP-nek az a lényege… Egy optimális megoldás megszerkesztésének két módszere is jó példa erre

Összegzés Dinamikus Programozás is részfeladatokra bont Akkor érdemes használni ha optimális a részstruktúra ismétlődő részfeladatok tipikusan optimalizálási feladatoknál Pénzváltás, hátizsák és LKR problémák