Mohó algoritmusok. Példa:

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

Programozási módszertan. Mohó algoritmusok

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

Nagy Gábor compalg.inf.elte.hu/ nagy

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

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

A továbbiakban Y = {0, 1}, azaz minden szóhoz egy bináris sorozatot rendelünk

Fibonacci számok. Dinamikus programozással

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

Nagy Gábor compalg.inf.elte.hu/ nagy

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.

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.

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

Általános algoritmustervezési módszerek

angolul: greedy algorithms, románul: algoritmi greedy

Online migrációs ütemezési modellek

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

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2. estis képzés

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

Zárthelyi dolgozat feladatainak megoldása õsz

Shannon és Huffman kód konstrukció tetszőleges. véges test felett

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

H=0 H=1. Legyen m pozitív egészre {a 1, a 2,, a m } különböző üzenetek halmaza. Ha az a i üzenetet k i -szer fordul elő az adásban,

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.

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány

2017/ Szegedi Tudományegyetem Informatikai Intézet

5. A gráf, mint adatstruktúra Gráfelméleti bevezető

Diszkrét matematika 2.C szakirány

Algoritmuselmélet 6. előadás

Informatikai Rendszerek Alapjai

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

1. feladat Az egyensúly algoritmus viselkedése: Tekintsük a kétdimenziós Euklideszi teret, mint metrikus teret. A pontok

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

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.

A MAXIMUM-KUPACOL eljárás helyreállítja az A[i] elemre a kupactulajdonságot. Az elemet süllyeszti cserékkel mindaddig, amíg a tulajdonság sérül.

Diszkrét matematika 2. estis képzés

Nagy Gábor compalg.inf.elte.hu/ nagy

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

Diszkrét matematika 2.C szakirány

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

Algoritmuselmélet. Mélységi keresés és alkalmazásai. Katona Gyula Y.

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

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

Nagy Gábor compalg.inf.elte.hu/ nagy

Algoritmuselmélet 18. előadás

Informatikai tehetséggondozás:

Az optimális megoldást adó algoritmusok

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

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:

Diszkrét matematika 2.

Adatszerkezetek II. 6. előadás

Kupac adatszerkezet. 1. ábra.

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

Az Informatika Elméleti Alapjai

KÓDOLÁSTECHNIKA PZH december 18.

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

2. Visszalépéses keresés

Algoritmuselmélet 7. előadás

Algoritmuselmélet. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 13.

Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)}

Alap fatranszformátorok II

f(x) vagy f(x) a (x x 0 )-t használjuk. lim melyekre Mivel itt ɛ > 0 tetszőlegesen kicsi, így a a = 0, a = a, ami ellentmondás, bizonyítva

Kétváltozós függvények differenciálszámítása

Számjegyes vagy radix rendezés

Dualitás Dualitási tételek Általános LP feladat Komplementáris lazaság 2017/ Szegedi Tudományegyetem Informatikai Intézet

A Peano-görbe. Besenyei Ádám ELTE

Optimalizálás alapfeladata Legmeredekebb lejtő Lagrange függvény Log-barrier módszer Büntetőfüggvény módszer 2017/

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

SzA II. gyakorlat, szeptember 18.

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.

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA

Algoritmusok és adatszerkezetek gyakorlat 07

9. Előadás. Megyesi László: Lineáris algebra, oldal. 9. előadás Mátrix inverze, mátrixegyenlet

Diszkrét matematika I.

További programozási esetek Hiperbolikus, kvadratikus, integer, bináris, többcélú programozás

Hátizsák feladat. Példa: A tárgyak (súly, fontosság) párokban (4,6) (3,5) (2,3) (2,3) a hátizsák kapacitása 8.

Felvételi tematika INFORMATIKA

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Az állítást nem bizonyítjuk, de a létezést a Paley-féle konstrukció mutatja: legyen H a

Logika es sz am ıt aselm elet I. r esz Logika 1/36

INFORMATIKA javítókulcs 2016

7. Előadás. Megyesi László: Lineáris algebra, oldal. 7. előadás Elemi bázistranszformáció

A lineáris programozás alapfeladata Standard alak Az LP feladat megoldása Az LP megoldása: a szimplex algoritmus 2018/

III. Gráfok. 1. Irányítatlan gráfok:

álló algoritmusosztályok. Approximációs algoritmusoknak egy olyan algoritmust. Minden algoritmusnak polinomiális idejűnek kell

Gráfelmélet. I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma

Mohó stratégia 2. előadás

Diszkrét Matematika MSc hallgatók számára 7. Előadás Párosítási tételek Előadó: Hajnal Péter Jegyzetelő: Kovácsházi Anna

8. Előadás. Megyesi László: Lineáris algebra, , oldal. 8. előadás Mátrix rangja, Homogén lineáris egyenletrendszer

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

1/1. Házi feladat. 1. Legyen p és q igaz vagy hamis matematikai kifejezés. Mutassuk meg, hogy

Nagyordó, Omega, Theta, Kisordó

Érdemes egy n*n-es táblázatban (sorok-lányok, oszlopok-fiúk) ábrázolni a két színnel, mely éleket húztuk be (pirossal, kékkel)

24. MINIMÁLIS KÖLTSÉGŰ UTAK I.

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

Átírás:

Mohó algoritmusok Optimalizálási probléma megoldására szolgáló algoritmus sokszor olyan lépések sorozatából áll, ahol minden lépésben adott halmazból választhatunk. Ezt gyakran dinamikus programozás alapján oldjuk meg, de előfordul, hogy a dinamikus programozás túl sok esetet vizsgál annak érdekében, hogy az optimális választást meghatározza. A mohó algoritmus mindig az adott lépésben optimálisnak látszó választást teszi. Vagyis, a lokális optimumot választja abban a reményben, hogy ez globális optimumhoz fog majd vezetni. Mohó algoritmus nem mindig ad optimális megoldást, azonban sok probléma megoldható mohó algoritmussal. Eseménykiválasztási probléma Tegyük fel, hogy adott események egy S = {a,a 2,...,a n } n elemű halmaza, amelyek egy közös erőforrást, például egy előadótermet kívánnak használni. A teremben egy időben csak egy esemény folyhat. Az a i esemény az s i kezdő időpont és az f i befejezési időpont által adott, ahol s i < f i. A cél egy maximális halmazát kiválasztani kompatibilis eseményeknek (i,j kompatibilis, ha s i f j vagy s j f i ). Feltesszük, hogy az S eseményhalmaz elemeit a befejezési idejük szerint nemcsökkenő sorrendbe rendeztünk. Példa:. táblázat. Az eseménykiválasztási probléma egy inputja i 2 3 4 5 6 7 8 9 0 s i 3 0 5 3 5 6 8 8 2 2 f i 4 5 6 7 8 9 0 2 3 4 MOHÓ-ESEMÉNY-KIVÁLASZTÓ(s,f) n:=hossz[s] Letesit(A:Halmaz) Bovit(A,) i:= for m=2 to n if s[m]>=f[i] then Bovit(A,m) i:=m return A Mohó algoritmus Példa: A = {,4,8,} A helyesség igazolása. Lemma Létezik olyan optimális megoldás, amely az eseménnyel kezdődik. Bizonyítás Legyen A egy tetszőleges optimális megoldás, legyen k a legkisebb indexű esemény. Ha k =, akkor az állítás nyilvánvaló, egyébként legyen A az a halmaz, amit A-ból kapunk úgy, hogy k-t kicseréljük -re. A Lemma teljesül, mert A is optimális. 2. Lemma Ha A tartalmazza -et és A optimális megoldása az S problémának, akkor A \ {} optimális megoldása az S problémának, ahol S = {i S : s i f } Bizonyítás Ha nem lenne optimális megoldása S -nek, akkor egy jobb megoldást kiegészítve -el, A-nál jobb megoldását kapnánk az S problémának.

A mohó megoldó stratégia elemei. Fogalmazzuk meg az optimalizációs feladatot úgy, hogy minden egyes választás hatására egy megoldandó részprobléma keletkezzék. 2. Bizonyítsuk be, hogy mindig van olyan optimális megoldása az eredeti problémának, amely tartalmazza a mohó választást, tehát a mohó választás mindig biztonságos. 3. Mutassuk meg, hogy a mohó választással olyan részprobléma keletkezik, amelynek egy optimális megoldásához hozzávéve a mohó választást, az eredeti probléma egy optimális megoldását kapjuk. Kapcsolat a dinamikus programozással A feladat megoldható lenne dinamikus programozással is. Legyen S i, j = {a k S : f i s k < f k s j }, tehát S i, j azokat az S-beli eseményeket tartalmazza, amelyek a i befejeződése után kezdődnek, és befejeződnek a j kezdete előtt, azaz kompatibilisek mind a i -vel mind pedig a j -vel. 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. Legyen c[i, j] az S i, j részprobléma optimális megoldásában az események száma, ekkor c[i, j] = 0, ha S i, j = 0 és c[i, j] = max i<k< j,ak S i, j {c[i,k] + c[k, j] + } egyébként. A rekurziónak a mohó megoldás mindig optimális megoldását adja. Hátizsák feladat Egy adott hátizsákba tárgyakat akarunk pakolni. Adott n tárgy minden tárgynak van egy fontossági értéke ( f [i]), és egy súlya (s[i]), a hátizsákba maximum összesen S súlyt pakolhatunk. Az s[i] és S értékek egészek. Szeretnénk úgy választani tárgyakat, hogy az összfontosság maximális legyen. Tehát feladatunk, hogy kiválasszuk a tárgyaknak olyan halmazai közül, amelyekre az összsúly nem haladja meg S-t azt, amelyre maximális az összfontosság. A töredékes változat abban különbözik az előzőtől, hogy a tárgyak töredéke is választható, nem kell 0- bináris választást tenni. Megoldó algoritmusok A töredékes hátizsák feladatot optimálisan megoldja egy mohó algoritmus. A feladat megoldásához számítsuk ki minden tárgyra a f [i]/s[i] fontosság per súly hányadost. A mohó stratégia szerint mindig 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. Mivel a tárgyakat az érték per súly hányados szerint kell rendeznie, a mohó algoritmus futási ideje O(nlogn) lesz. Ez a mohó algoritmus nem ad feltétlenül optimális megoldást a 0- hátizsák feladatra. Ezt igazolja a következő példa: s = [0,20,30], f = [60,00,20], S = 50. Huffman kód A Huffman-kód széles körben használt és nagyon hatékony módszer adatállományok tömörítésére. Az elérhető megtakarítás 20%-tól 90%-ig terjedhet, a tömörítendő adatállomány sajátosságainak függvényében. A kódolandó adatállományt karaktersorozatnak tekintjük. A Huffman féle mohó algoritmus egy táblázatot használ az egyes karakterek előfordulási gyakoriságára, hogy meghatározza, hogyan lehet a karaktereket optimálisan ábrázolni bináris jelsorozattal. Kódolási módszerek 2

2. táblázat. Karakterek kódolása karakter a b c d e f gyakoriság 45 3 2 6 9 5 fix hosszú kód 000 00 00 0 00 0 változó hosszú kód 0 0 00 0 00 Kézenfekvő megoldás fix hosszú kódokat használni, ekkor a betűk kódolásához 3 bit kell, így a teljes kód hossza: 300. A változó hosszú kód alkalmazása tekintélyes megtakarítást eredményez, ha gyakori karaktereknek rövid, ritkán előforduló karaktereknek hosszabb kódszavat feleltetünk meg. A fenti példában szereplő kód esetén a kódoláshoz szükséges bitek száma: (45 + 3 3 + 2 3 + 6 3 + 9 4 + 5 4) = 224. A kódot vissza is kell tudnunk fejteni. A továbbiakban csak olyan kódszavakat tekintünk, amelyekre igaz, hogy egyik sem kezdőszelete a másiknak. Az ilyen kódolást prefix-kódnak vagy prefix mentes kódnak nevezzük. Kódok ábrázolása Az olyan bináris fa, amelynek levelei a kódolandó karakterek, egy alkalmas ábrázolása a prefixmentes kódoknak. Ekkor egy karakter kódját a fa gyökerétől az adott karakterig vezető út ábrázolja, a 0 azt jelenti, hogy balra megyünk, az pedig, hogy jobbra megyünk az úton a fában. Ekkor minden karakter kódjának hossza a fában a megfelelő levél mélysége, így a teljes állomány kódolásának várható hossza egy adott T fára: B T = f (c)d T (c), c C ahol C a karakterek halmaza, f (c) a c karakter gyakorisága, d T (c) pedig a c-nek megfelelő levél mélysége a T fában. Huffman kód algoritmusa A kód fájának megszerkesztéséhez egy prioritási sort használunk, amely a fa pontjait az f érték alapján tárolja. Eredményképpen a fa gyökerét adja az algoritmus vissza. HUFFMAN(C) n:= C Letesit(Q:PriSor) for (c in C) Sorba(Q,c) for i= to n- új z csúcs létesítése Sorbol(Q,x) bal[z]:=x y:=sorbol(q,y) jobb[z]:=y f[z]:=f[x]+ f[y] Sorba(Q,z) Sorbol(Q,x) Return x Az algoritmus futási ideje O(nlogn). 3

Megjegyzés: A fenti pszeudókód által kapott algoritmus nem alkalmas arra, hogy az egyes pontók kódját hatékonyan megkapjuk belőle. Egy hatékony megvalósítás során, a fa konstruálásánál, az adot pont fiainál meg kell jegyeznünk, hogy bal vagy jobb fiúk. Példa: 00 0 a 45 0 55 0 25 30 0 c 2 b 3 4 d 6 0 f 5 e 9. ábra. Helyesség. Lemma Legyen C tetszőleges karakter halmaz, és legyen f [c] a c C karakter gyakorisága. Legyen x és y a két legkisebb gyakoriságú karakter C -ben. Ekkor létezik olyan optimális prefix-kód, amely esetén az x-hez és y-hoz tartozó kódszó hossza megegyezik, és a két kódszó csak az utolsó bitben különbözik. Bizonyítás: A bizonyítás alapötlete az, hogy vegyünk egy optimális prefix-kódot ábrázoló T fát és módosítsuk úgy, hogy a fában x és y a két legmélyebben lévő testvércsúcs legyen. Ha ezt meg tudjuk tenni, akkor a hozzájuk tartozó kódszavak valóban azonos hosszúságúak lesznek és csak az utolsó bitben különböznek. Legyen a és b a T fában a két legmélyebb testvércsúcs. Az általánosság megszorítása nélkül feltehetjük, hogy f [a] f [b] és f [x] f [y]. Mivel f [x] f [y] a két legkisebb gyakoriság, ezért azt kapjuk, hogy f [x] f [a] és f [y] f [b]. Cseréljük ki az a és x pontokat T -ben, legyen a kapott fa T. Majd cseréljük ki a b és y pontokat T -ben a kapott fa legyen T. Ekkor kiszámolva a költségeket: B(T ) B(T ) = ( f [a] f [x])(d T (a) d T (x)) 0 B(T ) B(T ) = ( f [b] f [y])(d T (b) d T (y)) 0. Következésképpen T is optimális. A konstrukció teljesíti az optimális részproblémák tulajdonságot. 2. Lemma Legyen C tetszőleges ábécé, és minden c C karakter gyakorisága f [c]. Legyen x és y a két legkisebb gyakoriságú karakter C-ben. Tekintsük azt a C ábécét, amelyet C-ből úgy kapunk, hogy eltávolítjuk az x és y karaktert, majd hozzáadunk egy új z karaktert, tehát C = C \ {x,y} {z}. Az f gyakoriságok C -re megegyeznek a C-beli gyakoriságokkal, kivéve z esetét, amelyre f[z] = f[x]+ f[y]. Legyen T olyan fa, amely optimális prefix-kódját ábrázolja a C ábécének. Ekkor az a T fa, amelyet úgy kapunk, hogy a z levélcsúcshoz hozzákapcsoljuk gyerek csúcsként x-et és y-t, olyan fa lesz, amely a C ábécé optimális prefix-kódját ábrázolja. Bizonyítás: A formulák behelyettesítésével adódik, hogy B(T ) = B(T ) + f [x] + f [y]. 4

Ezt követően indirekt bizonyítunk. Tegyük fel, hogy T nem optimális prefix-kódfa a C ábécére. Ekkor létezik olyan T kódfa C-re, hogy B(T ) < B(T ). Az általánosság megszorítása nélkül (az. lemma alapján) feltehetjük, hogy x és y testvérek. Legyen T az a fa, amelyet T -ből úgy kapunk, hogy eltávolítjuk az x és y csúcsokat, és ezek közös z szülőjének gyakorisága az f [z] = f [x] + f [y] érték lesz. Ekkor B(T ) = B(T ) f [x] f [y] < B(T ) f [x] f [y] = B(T ), ami ellentmondás. Kiskérdések Eseményválasztás algoritmusa Huffman kód algoritmusa Huffman kód algoritmusának végrehajtása Szorgalmi feladat Adott egy fémrúd, amelyet megadott számú és hosszúságú darabokra kell felvágni. A vágások tetszőleges sorrendben elvégezhetőek, az a lényeg, hogy a végén a kívánt darabszámú és hosszúságú darabok keletkezzenek. Olyan vágógéppel kell a feladatot megoldani, amely egyszerre csak egy vágást tud végezni. Egy vágás költsége megegyezik annak a darabnak a hosszával, amit éppen (két darabra) vágunk. A célunk optimalizálni a műveletsor teljes költséget. Adjunk meg olyan algoritmust, amely kiszámítja a vágási műveletsor optimális összköltségét. Az algoritmus futási ideje O(n logn) legyen, ha n a darabok száma! Beküldés: cimreh@inf.u-szeged.hu, Pszeudókod vagy forrás+magyarázat + futási idő elemzés első két megoldó 5-5 pont harmadik, negyedik, ötödik megoldó 0-0 pont hatodik, hetedik, nyolcadik megoldó 5-5 pont A szerzett plusszpontok a vizsga minimumkövetelményébe nem számítanak bele. 5