Programozási módszertan. Mohó algoritmusok

Hasonló dokumentumok
Mohó algoritmusok. Példa:

8. Mohó algoritmusok Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

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

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

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

angolul: greedy algorithms, románul: algoritmi greedy

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

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

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

Korlátozás és szétválasztás elve. ADAGOLO adattípus

Az B sorozatban a pontok helyes preorder sorrendben vannak. A preorder bejárásban p k -t közvetlenül q m követi.

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

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

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

Algoritmusok bonyolultsága

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

Képfeldolgozás haladóknak Lovag Tamás Novák Gábor 2011

Számjegyes vagy radix rendezés

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

Számítógépes döntéstámogatás. Genetikus algoritmusok

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Fibonacci számok. Dinamikus programozással

2. Visszalépéses stratégia

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

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

2. Visszalépéses keresés

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

Általános algoritmustervezési módszerek

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

1. ábra. Számláló rendezés

értékel függvény: rátermettségi függvény (tness function)

Approximációs algoritmusok

Algoritmusok bonyolultsága

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.

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

14. Mediánok és rendezett minták

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.

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

i=1 i+3n = n(2n+1). j=1 2 j < 4 2 i+2 16 k, azaz az algoritmus valóban konstans versenyképes.

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.

Számláló rendezés. Példa

Kontrollcsoport-generálási lehetőségek retrospektív egészségügyi vizsgálatokhoz

Gyakorlatok. P (n) = P (n 1) + 2P (n 2) + P (n 3) ha n 4, (utolsó lépésként l, hl, u, hu-t léphetünk).

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.

2015, Diszkrét matematika

A Szállítási feladat megoldása

Miskolci Egyetem Gépészmérnöki és Informatikai Kar Informatikai Intézet Alkalmazott Informatikai Intézeti Tanszék

Térinformatikai algoritmusok Elemi algoritmusok

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

Algoritmusok és adatszerkezetek II.

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

Kupac adatszerkezet. 1. ábra.

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

Gyártórendszerek dinamikája

RSA algoritmus. P(M) = M e mod n. S(C) = C d mod n. A helyesség igazoláshoz szükséges számelméleti háttér. a φ(n) = 1 mod n, a (a 1,a 2,...

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

Informatikai tehetséggondozás:

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

INFORMATIKA javítókulcs 2016

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

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

Térinformatikai algoritmusok Elemi algoritmusok

Amortizációs költségelemzés

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

GRÁFELMÉLET. 7. előadás. Javító utak, javító utak keresése, Edmonds-algoritmus

Programozási segédlet

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

2017/ Szegedi Tudományegyetem Informatikai Intézet

Online migrációs ütemezési modellek

Az optimális megoldást adó algoritmusok

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

Megoldás meghatározása Ez a szakasz kitölti a c és S táblázatokat, a kiíratás S alapján egy rekurzív algoritmussal megtehető.

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

Minden x > 0 és y 0 valós számpárhoz létezik olyan n természetes szám, hogy y nx.

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

Felvételi tematika INFORMATIKA

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

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

Mesterséges Intelligencia I. (I602, IB602)

Algoritmuselmélet 1. előadás

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

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.

Dinamikus programozás II.

értékel függvény: rátermettségi függvény (tness function)

Miskolci Egyetem Gépészmérnöki és Informatikai Kar Informatikai Intézet Alkalmazott Informatikai Intézeti Tanszék

10. Szimultán kiválasztások

Számítógépes döntéstámogatás. Döntések fuzzy környezetben Közelítő következtetések

2016, Diszkrét matematika

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

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Algoritmusok helyességének bizonyítása. A Floyd-módszer

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Algoritmuselmélet. Függvények nagyságrendje, elágazás és korlátozás, dinamikus programozás. Katona Gyula Y.

Gráfelméleti feladatok. c f

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

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

Algoritmusok vektorokkal keresések 1

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

Átírás:

PM-08 p. 1/17 Programozási módszertan Mohó algoritmusok Werner Ágnes Villamosmérnöki és Információs Rendszerek Tanszék e-mail: werner.agnes@virt.uni-pannon.hu

PM-08 p. 2/17 Bevezetés Dinamikus programozás bizonyos feladatok esetében túl sok esetet vizsgál Moho algoritmus: az adott lépésben optimálisnak látszó választást teszi lokális optimumot választ abban a reményben, hogy ez globális optimumhoz fog vezetni

PM-08 p. 3/17 A mohó stratégia elemei 1. A probléma optimális szerkezetének meghatározása. 2. Rekurzív megoldás kifejlesztése. 3. Annak bizonyítása, hogy minden rekurzív lépésben az egyik optimális választás a mohó választás. Tehát mindig biztonságos a mohó választás. 4. Annak igazolása, hogy a mohó választás olyan részproblémákat eredményez, amelyek közül legfeljebb az egyik nem üres. 5. A mohó stratégiát megvalósító rekurzív algoritmus kifejlesztése. 6. A rekurzív algoritmus átalakítása iteratív algoritmussá.

PM-08 p. 4/17 Jellemzők A mohó algoritmus mindig az adott lépésben optimálisnak látszó választást teszi. Csak egy részproblémát kell vizsgálni az optimális megoldáshoz. Minden részproblémát felülről-lefelé haladó módon meg tudunk oldani.

PM-08 p. 5/17 Esemény-kiválasztási probléma Tegyük fel, hogy adott események egy S = {a 1,a 2,...,a n } n elemű halmaza, amelyek egy közös erőforrást használnak, például egy előadótermet, amit egy időben csak egyik használhat. Minden a i eseményhez adott az s i kezdő időpont és az f i befejező időpont, ahol s i < f i. Ha az a i eseményt kiválasztjuk, akkor ez az esemény az [s i,f i ) félig nyitott idő intervallumot foglalja le. Az a i és a j események kompatibilisek, ha az [s i,f i ) és [s j,f j ) intervallumok nem fedik egymást (azaz a i és a j kompatibilisek, ha s i f j vagy s j f i ). Az esemény-kiválasztási probléma azt jelenti, hogy kiválasztandó kölcsönösen kompatibilis eseményeknek egy legnagyobb elemszámú halmaza.

PM-08 p. 6/17 Optimális részproblémák szerkezete 1 Első feladat: megtaláljuk az optimális szerkezetet, és felépítsük a feladat optimális megoldását a részproblémák optimális megoldásaiból. Definiáljuk a következő halmazokat: S i,j = {a k S f i s k < f k s j } (S i,j azokat az S-beli eseményeket tartalmazza, amelyek a i befejeződése után kezdődhetnek, és befejeződnek az a j kezdete előtt) A teljes probléma kezeléséhez egészítsük ki az eseményhalmazt az a 0 és a n+1 eseményekkel, ahol f 0 = 0, s n+1 = Ekkor S = S 0,n+1, és a részproblémák indexeinek tartománya: 0 i,j n + 1.

PM-08 p. 7/17 Optimális részproblémák szerkezete 2 Tegyük fel, hogy az események a befejezésük szerint monoton nem-csökkenő sorrendbe rendezettek. f 0 f 1 f 2... f n < f n+1 A részprobléma szerkezetének meghatározásához tekintsünk egy nem üres S i,j részproblémát, és tegyük fel, hogy valamely a k eleme a megoldásnak, azaz f i s k < f k s j. Az a k eseményt használva két részproblémát kaphatunk: S i,k, S k,j S i,j megoldását megkapjuk, ha az S i,k és S k,j megoldásának egyesítéséhez hozzávesszük az a k eseményt.

PM-08 p. 8/17 Optimális részproblémák szerkezete 3 Optimális részproblémák szerkezete: Tegyük fel, hogy A i,j egy optimális megoldása az S i,j részproblémának és a k A i,j. Ekkor az A i,k megoldás optimális megoldása kell legyen az S i,k részproblémának, és az A k,j megoldás optimális megoldása kell legyen az S k,j részproblémának. Ezután megmutatjuk, hogy az eredeti probléma optimális megoldása felépíthető a részproblémák optimális megoldásiból.

PM-08 p. 9/17 Rekurzív megoldás Legyen c[i,j] az S i,j részprobléma maximális elemszámú, kölcsönösen kompatibilis eseményeket tartalmazó részhalmaz elemszáma. c[i,j] = 0, ha S i,j =, és c[i,j] = 0, ha i > j Kapjuk a következő rekurzív összefüggést: c[i,j] = c[i,k] + c[k,j] + 1 k értékét nem ismerjük, összesen j i 1 lehetséges értéket vehet fel A teljes rekurzív alak: c[i, j] = { 0, ha S i,j = 0 max i<k<j; ak S i,j {c[i,k] + c[k,j] + 1}, ha S i,j 0

PM-08 p. 10/17 Átalakítás A dinamikus programozási megoldás átalakítása mohó megoldássá: Tétel: Tekintsünk egy S i,j nem üres részproblémát, és legyen a m a legkisebb befejezési idejű esemény S i,j -ben. Ekkor f m = min{f k a k S i,j } 1. a m eleme S i,j valamely maximális elemszámú, kölcsönösen kompatibilis eseményekből álló részhalmazának. 2. Az S i,m részprobléma üres, tehát a m választásával legfeljebb az S m,j nem üres. Dinamikus programozás 2 részprobléma vizsgálata Tétel segítségével csak 1 részprobléma kell az optimális megoldáshoz Minden részproblémát felülről-lefelé haladó módon oldunk meg.

PM-08 p. 11/17 Rekurzív mohó algoritmus 1 Bemenő paraméterei: az események kezdő és befejező időpontjait tartalmazó s és f tömb a megoldandó S i,n+1 részproblémát meghatározó i és n sorszám Az eljárás S i,n+1 egy maximális elemszámú, kölcsönösen kompatibilis eseményeket tartalmazó részhalmazát adja eredményül. Feltételezzük, hogy az n bemeneti esemény befejezési idő szerint monoton nem-csökkenő sorrendbe rendezett. A kiindulási probléma megoldását a REKURZIV ESEMENY KIV ALASZTO(s,f,0,n eljáráshívás adja.

PM-08 p. 12/17 Rekurzív mohó algoritmus 2 REKURZIV ESEMENY KIV ALASZTO(s,f,i,n) 1. m i + 1 2. while m n és s m < f i 3. do m m + 1 4. if m n 5. then return {a m } REKURZIV ESEMENY KIV ALASZTO(s,f,m,n) 6. else return

Program - eredmény PM-08 p. 13/17

PM-08 p. 14/17 Iteratív mohó algoritmus A MOHÓ-ESEMÉNY-KIVÁLASZTÓ eljárás egy iteratív változata a REKURZÍV-ESEMÉNY-KIVÁLASZTÓ eljárásnak. Ez feltételezi, hogy a bemeneti események befejezési idejük szerint monoton nem-csökkenő sorrendbe rendezettek. MOHO ESEMENY KIV ALASZTO(s, f) 1. n hossz[s] 2. A {a 1 } 3. i 1 4. for m 2 to n 5. do if s m f i 6. then A A {a m } 7. i m 8. returna f i mindig a legnagyobb befejezési idejű esemény az A halmazban. Tehát f i = max{f k a k A}. Futási idő: Θ(n)

PM-08 p. 15/17 Mohó stratégia vagy dinamikus programozás az optimális részproblémák tulajdonságot kihasználjuk mind a mohó, mind a dinamikus programozási stratégiáknál, előfordulhat, hogy dinamikus programozási megoldást próbálunk adni akkor, amikor mohó megoldás is célravezető lenne, és fordítva A 0 1 hátizsák feladat: Adott n darab tárgy, az i-edik tárgy használati értéke v i, a súlya pedig w i, ahol v i és w i egész számok. Kiválasztandó a tárgyaknak olyan részhalmaza, amelyek használati értékének összege a lehető legnagyobb, de a súlyuk összege nem nagyobb, mint a hátizsák W kapacitása, amely egész szám. Mely tárgyakat rakjuk a hátizsákba? A töredékes hátizsák feladat: a tárgyak töredéke is választható, nem kell 0 1 bináris választást tenni.

PM-08 p. 16/17 Feladatok elemzése 1 Mindkét hátizsák feladat teljesíti az optimális részproblémák tulajdonságot. A 0 1 feladat esetén tekintsünk egy olyan választást, amely a legnagyobb használati értéket adja, de a tárgyak összsúlya nem haladja meg a W értéket. Ha kivesszük a j-edik tárgyat a hátizsákból, akkor a bennmaradt tárgyak használati értéke a legnagyobb lesz azon feltétel mellett, hogy az összsúly nem nagyobb, mint W w j, és n 1 tárgyból választhatunk, kizárva az eredeti tárgyak közül a j-ediket. A töredékes hátizsák feladatnál ha egy optimális választásból kiveszünk a j tárgyból w mennyiséget, akkor a megmaradt választás optimális lesz arra az esetre, amikor legfeljebb W w összsúlyt érhetünk el és a j-edik tárgyból legfeljebb w j w mennyiséget választhatunk.

PM-08 p. 17/17 Feladatok elemzése 2 a 0 1 hátizsák feladat megoldható dinamikus programozással: ha egy tárgy beválasz- tásáról döntünk, akkor előbb össze kell hasonlítani annak a két részproblémának a megoldását, amely a tárgy beválasztásával, illetve kihagyásával adódik. Az így megfogalmazott probléma sok, egymást átfedő részproblémát eredményez a töredékes hátizsák feladat megoldható mohó stratégiával: megoldásához előbb számítsuk ki minden tárgyra a v i /w i használati érték per súly hányadost. A mohó stratégiát követve először a legnagyobb hányadosú tárgyból választunk amennyit csak lehet. Ha elfogyott, de még nem telt meg a hátizsák, akkor a következő legnagyobb hányadosú tárgyból választunk amennyit csak lehet, és így tovább, amíg a hátizsák meg nem telik.