Fejlett elemzési és tervezési módszerek

Slides:



Advertisements
Hasonló előadás
Készítette: Kosztyán Zsolt Tibor
Advertisements

A Szállítási feladat megoldása
Készítette: Kosztyán Zsolt Tibor
Nevezetes algoritmusok
Microsoft Excel 3. óra Előadó: Jánosik Tamás.
Adatelemzés számítógéppel
Programozási tételek, és „négyzetes” rendezések
A normalizálás az adatbázis-tervezés egyik módszere
Függvények Egyenlőre csak valós-valós függvényekkel foglalkozunk.
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
MI 2003/ A következőkben más megközelítés: nem közvetlenül az eloszlásokból indulunk ki, hanem a diszkriminancia függvényeket keressük. Legegyszerűbb:
Programozási alapismeretek 5. előadás. ELTE Szlávi - Zsakó: Programozási alapismeretek 5.2/  Programozási tételek.
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
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.
Prímtesztelés Témavezető: Kátai Imre Komputeralgebra Tanszék Nagy Gábor:
Euklidészi gyűrűk Definíció.
4. VÉGES HALMAZOK 4.1 Alaptulajdonságok
Az összehasonlító rendezések
Programozási alapismeretek 5. előadás. ELTE 2/  Programozási tételek – a lényeglényeg  Sorozatszámítás Sorozatszámítás.
Programozási alapismeretek 8. előadás. ELTE 2/  További programozási tételek További programozási tételek 
MI 2003/ Alakfelismerés - még egy megközelítés: még kevesebbet tudunk. Csak a mintánk adott, de címkék nélkül. Csoportosítás (klaszterezés, clustering).
Készítette: Pető László
Papp Róbert, Blaskovics Viktor, Hantos Norbert
OPERÁCIÓKUTATÁS Kalmár János, 2012 Tartalom A nulla-egy LP megoldása Hátizsák feladat.
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Év eleji információk Előadó: Hosszú Ferenc II. em Konzultáció: Szerda 9:50 – 10:35 II. em
Edényrendezés - RADIX „vissza” - bináris számokra
„Országos” feladat. Feladat: Egy tetszőleges, színes országokat tartalmazó térképen akar eljutni egy kommandós csapat egy országból egy másikba. Viszont.
Gazdasági informatikából megkaptuk a félévi feladatot!!! Mindenki „nagy” örömére… 0. hét.
Gazdasági informatikából megkaptuk a félévi feladatot!!! Mindenki nagy örömére… 0. hét.
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Microsoft Excel Függvények VII..
Készítette: Kosztyán Zsolt Tibor
Nevezetes algoritmusok Beszúrás Van egy n-1 elemű rendezett tömbünk. Be akarunk szúrni egy n-edik elemet. Egyik lehetőség, hogy végigszaladunk a tömbön,
Alapszint 2.  Készíts makrót, ami a kijelölt cellákat egybenyitja, a tartalmat vízszintesen és függőlegesen középre igazítja és 12 pontos betűméretűre.
Lénárt Szabolcs Páll Boglárka
Lineáris programozás.
Lineáris programozás Elemi példa Alapfogalmak Általános vizsg.
A Birodalmi lépegetőtől… Egy játék matematikája. Egyszer volt… Ha megnőnek a gyerekek, akkor a matematikusnak marad a solitaire :( Van k darab doboz 1-től.
A Birodalmi lépegetőtől… Egy játék matematikája. Egyszer volt… Ha megnőnek a gyerekek, akkor a matematikusnak marad a solitaire :( Van k darab doboz 1-től.
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.
Alapsokaság (populáció)
A Dijkstra algoritmus.
Az elvben figyelembe veendő kapcsolási rendek számáról képet kaphatunk, ha felmérjük az adott N és M áramok és egy-egy fűtő- és hűtőközeg.
Algoritmizálás, adatmodellezés tanítása 8. előadás.
Készítette: Horváth Viktória
2. Feladat. És akkor kezdjük is el! Menü Mint ahogy már megszokhattuk módosítsuk az editek text mező tulajdonságát a minta szerint! Tovább.
Dr. Bánkuti Gyöngyi Klingné Takács Anna
Táblázatkezelés KÉPLETEK.
Adatvizualizáció Segédanyag a Gazdasági informatika tárgyához
Business Mathematics A legrövidebb út.
GRÁFOK Definíció: Gráfnak nevezzük véges vagy megszámlálhatóan végtelen sok pont és azokat összekötő szintén véges vagy megszámlálhatóan végtelen sok.
A HATÁROZOTT INTEGRÁL FOGALMA
Függvények.
Programozási alapismeretek 8. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/  További programozási.
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ó,
Gráf szélességi bejárása. A szélességi bejárás elmélete Célja egy véges gráf összes csúcsának bejárása a kezdőcsúcstól való távolságuk szerinti növekvő.
Memóriakezelés feladatok Feladat: 12 bites címtartomány. 0 ~ 2047 legyen mindig.
INFOÉRA Gráfok, gráfalgoritmusok II. (Horváth Gyula és Szlávi Péter előadásai felhasználásával) Juhász István-Zsakó László: Informatikai.
KÉSZÍTETTE: KOVÁCSICS KRISZTIÁN
Programozás III ÖTLETEK A FELADATMEGOLDÁSHOZ. A HF-EK APROPÓJÁN Néhány javaslat: 1. Jó lenne, ha a feladatmegoldás előtt átnéznék az előadás-anyagokat.
A Mozilla magyar nyelvű szerkesztőjének használata
Táblázatkezelés Képletek és függvények. Képletek A képletek olyan egyenletek, amelyek a munkalapon szereplő értékekkel számításokat hajtanak végre. A.
Mediánok és rendezett minták
A maximum kiválasztás algoritmusa
Algoritmusok és Adatszerkezetek I.
Cache példák 2019 (IMSC).
Előadás másolata:

Fejlett elemzési és tervezési módszerek Dinamikus programozás, mohó algoritmus

Bevezetés Sok feladat szól arról, hogy döntések sorozatát kell meghozni egy végső optimális megoldás megtalálásához. Egyszerű megoldás lenne, ha minden lehetőséget megnéznénk, és csak kiválasztanánk az optimális megoldást közülük (legkisebb, legnagyobb stb.). Ez sajnos egyszerű, de haszontalan. De miért is?

Hátizsák probléma Vegyük a híres „Hátizsák probléma” elnevezésű feladatot, és nézzük meg, miért nem működik a minden lehetőség végigpróbálása. A feladat: Adott n darab tárgy, mindegyikre ismert egy f[i] fontossági érték, illetve egy s[i] súly. Adott még a hátizsák súlykorlátja: S. A tárgyaknak egy olyan halmazát kell kiválasztani, melynek összsúlya nem haladja meg a súlykorlátot, és fontossági értéke maximális.

Hátizsák probléma Első megközelítésre próbáljuk meg az összes lehetőséget felvázolni, ezeknél megnézni, hogy megfelelő-e (nem haladja-e túl a súlykorlátot), és ha megfelelő, akkor összehasonlítani az addigi maximummal. Az összes esetet könnyű felvázolni: minden tárgy vagy benne van a zsákban, vagy nincs. Tehát 2n féle lehetőséget különböztetünk meg.

Hátizsák probléma Vegyünk egy olyan számítógépet, mely 1010 művelet/s sebességgel dolgozik. Láttuk, hogy n darab tárgy esetén 2n-nel arányos műveletre lenne szükség. Nézzük meg, hogyan alakul ennek függvényében a futási idő. Ha n=10, akkor 1.02*10-7 s nagyságrendű lesz a futási idő, ez még rendben van Ha n=100, akkor viszont 4*1012 ÉV lenne a futási idő.

Dinamikus programozás Alapgondolat: részproblémákra bontás oly módon, hogy a részproblémáknak közös részproblémáik legyenek Az egyes részproblémák megoldásait táblázatos formában tároljuk, így mikor azok eredménye ismételten kelleni fog, nem kell újból kiszámolni.

Hátizsák probléma újra Meg kellene találni a megfelelő részfeladatokra bontást. Jelen feladatnál biztosan megállapítható: S súlykorlátra nem tudjuk megmondani, a választ, de ha a súlykorlát 0 lenne, akkor a válasz triviális Az is igaz, hogy ha n darab tárgy helyett 0 darab lenne, akkor is triviális a válaszunk

Hátizsák probléma újra Csináljuk tehát egy táblázatot. Vízszintes irányban 0-tól S-ig engedjük léptetni a súlykorlátot. Függőleges tengelyen 0-tól n-ig a felhasználható tárgyak számát léptetjük. Mivel ez nem egyértelmű (5 tárgyat veszek ki a 10-ből, de melyik 5-öt?), ezért kell egy megállapodás, hogy egyértelmű legyen. Jelen esetben mondjuk azt, hogy ha k darab tárgyat veszek, az azt jelenti, hogy a felsorolt tárgyak közül az első k darab lesz az.

Hátizsák probléma újra 1 2 … S-1 S 3 n-1 n Az i. sor j. oszlopa megadja azt a részproblémát, mely az első i darab tárgyat engedi felhasználni, és j súlykorlátot ad meg (i és j 0-tól kezdi a számozást).

Hátizsák probléma újra Írjuk be a triviális eseteket… 1 2 … S-1 S 3 n-1 n

Hátizsák probléma újra Jelentse v(i,j) az i. sor j. oszlopát. Ha i=0 vagy j=0, akkor ahogy a táblázatból is látszik, a válasz egyértelmű: 0. Hogyan lehet kiszámolni egy tetszőleges v(i,j)-t?

Hátizsák probléma újra Egy v(i,j) esetében két lehetőség állhat fent: Az i. sorszámú tárgyat nem tesszük bele a zsákba. Ekkor v(i,j) éppen megegyezik v(i-1,j)-vel, hiszen a j. tárgyat nem használjuk fel. Másik eset, hogy felhasználjuk a j. tárgyat. Ekkor v(i,j) = f(i) + v(i-1,j-s(i)). Magyarázat: ha felhasználjuk az i. tárgyat, akkor az összértékbe bele fog számítani az i. tárgy értéke, és még mellette megnézzük, hogy a maradék kapacitással (j a jelenlegi teljes kapacitás, ebből kivonjuk a betett i. tárgy súlyát), és a maradék tárggyal (az első i darab tárgyból i.-et felhasználtuk, így maradt az első i-1 darab) mi az optimum, s ezeket összeadjuk. Természetesen a két lehetőség közül az optimálist választjuk, tehát a nagyobbat.

Hátizsák probléma újra Általánosan felírhatjuk tehát, hogy: v(i,j) = max ( v(i-1,j) ; f(i)+v(i-1,j-s(i)) A feladat megoldását pedig nem fogja más adni, mint v(n,S) kiszámolása (a táblázat jobb alsó cellája. Itt persze figyelni kell rá, hogy ha s(i) nagyobb, mint j akkor a tömbön kívülre tudunk címezni. Ezt kerülendő programozáskor figyelni kell rá, hogy ilyen esetben v(i,j) = v(i-1,j), hiszen a j. tárgy biztosan nem kerülhet be a hátizsákba j súlykorlát mellett!

Hátizsák probléma újra Miért hatékonyabb ez a megoldás? Ahogy azt már megnéztük a „minden eset” féle megoldás 2n nagyságrenden dolgozik. Mi a helyzet az új megoldással? Ha belegondolunk nem csinálunk mást, mint egy n*S méretű táblázat minden celláját kitöltjük (igazából 0-tól kezdjük, vagyis (n+1)*(S+1), de minket csak a nagyságrendje érdekel, így számolhatunk nyugodtan n*S-sel)

Hátizsák probléma újra Kérdés: egy cella kiszámolása hány lépés? Egy cella kiszámolása nem más, mint két másik cella értékének beolvasása, és a nagyobb kiválasztása. Ami látszik, hogy egy cella kitöltése nem függ az input méretétől (v(5,6) kiszámolása ugyanaz akkor is ha n=10 meg ha n=1000…)

Hátizsák probléma újra Mivel egy cella kitöltése nem függ az input méretétől, így azt mondjuk: konstans lépésben végez. Konstans lépésszámot algoritmushatékonyság vizsgálatánál elhanyagolhatunk (nem a pontos lépésszám érdekel, hanem az, hogy az input függvényében mennyire képes „elszállni” a lépésszám nagyságrendje).

Hátizsák probléma újra Mivel a konstans lépésszámot elhanyagoltuk, látszik, hogy DP-vel a lépésszám n*S nagyságrendű lesz. Egy ilyen szorzatot felülről becsülhetünk a nagyobbik tagjának négyzetével. Az pedig egyértelmű, hogy az exponenciális függvényhez képest a négyzetes függvény sokkal lassabb ütemben növekszik.

Egyéb feladatok DP-hez Kemence Egy fazekasműhelyben N tárgy vár kiégetésre. A kemencébe a beérkezés sorrendjében tehetők be, egyszerre legfeljebb K darab. Minden tárgynak ismerjük a minimális égetési idejét, amennyit legalább a kemencében kell töltenie. Adjuk meg a minimális időt, ami alatt minden tárgy kiégethető!

Egyéb feladatok DP-hez Az első menet kialakításánál legfeljebb K darab lehetőségünk van Az első tárgy egyedül kerül kemencébe Az első kettő kerül a kemencébe … Az első K darab kerül a kemencébe A feladat megoldása nem más, mint ezen lehetőségek közül az optimális, ami valahogy így számolható ha az első j darab kerül a kemencébe (j<=K) Optimum(teljes) = MaxÉgetésiIdő(1..j) + Optimum(maradék)

Egyéb feladatok DP-hez A részprobléma az Optimum(r) meghatározása, mely megadja az optimális (minimális) égetési időt, ha az r, (r+1), (r+2), … , N sorszámú tárgyakat kell figyelembe venni. Egy részprobléma maximum K darab részprobléma eredményének függvényében egy minimum vizsgálattal el tudja dönteni, hogy mi az adott részmegoldás. Ha az Optimum(r) eredményeket eltároljuk, akkor mindet csak egyszer kell kiszámolni, így egy N elemből álló tömböt kell kitölteni.

Egyéb feladatok DP-hez A feladatot tovább lehet nehezíteni: Tárgyaknak van súlyuk, és a kemencének súlykorlátja van Ekkor Optimum(r) meghatározásánál nem a tárgyak számára teszünk korlátot, hanem az összsúlyra Van maximum égetési idő is (aminél több ideig nem lehet a kemencében) Ekkor a vizsgált lehetőségeket tovább korlátozza, hogy addig lehet újabb tárgyat belevenni, amíg igaz lesz, hogy egyik tárgy maximum égetési ideje sem kisebb, mint a legnagyobb minimális égetési idő Van határidő (ameddig mindenképp késznek kell lennie) Ekkor a lehetőségeket tovább korlátozza, hogy addig lehet újabb tárgyat belevenni a menetbe, amíg igaz lesz, hogy a legnagyobb minimális égetési idő nem nagyobb, mint a legkisebb határidő

Egyéb feladatok DP-hez Pénzváltás Adott P1, P2, … , Pn pénzjegyek. Kifizethető- e az S összeg ezen pénzjegyekkel úgy, hogy mindegyik pénzjegyből tetszőleges számú áll rendelkezésre? Gondolkozzunk hasonlóan, mint ahogyan a kemencénél kellett!

Egyéb feladatok DP-hez Megoldás: Lehet(S) nem más, mint: Lehet(S-P1) VAGY Lehet(S-P2) VAGY … Lehet(S-Pn) Tehát S akkor és csak akkor fizethető ki P1…Pn-nel, ha legalább egyik Px-re (Px eleme P1..Pn) igaz lesz, hogy az S-Px összeg kifizethető. A dinamikus programozás szabálya szerint minden részproblémát csak egyszer számolunk ki, így a Lehet(x) értékeket egy tömbben tárolni fogjuk az alábbiak szerint -2 ha nincs még kiszámolva, hogy lehet-e -1 ha nem lehet kifizetni 0 ha van ilyen pénzjegy 1 ha nincs ilyen pénzjegy, de kifizethető

Egyéb feladatok DP-hez És ha meg kell adni, hogy melyik pénzjegyből hányat kell felhasználni?

Egyéb feladatok DP-hez És ha meg kell adni, hogy melyik pénzjegyből hányat kell felhasználni? Ekkor a Lehet(X) úgy néz ki, hogy: -2 ha még nincs kiszámolva -1 ha már ki van számolva 0 ha van ilyen pénzjegy Px ha kifizethető, és X-Px is kifizethető (több ilyen esetén mindegy)

Egyéb feladatok DP-hez És ha meg kell adni, hogy melyik pénzjegyből hányat kell felhasználni? A Kifizet(S) pedig úgy néz ki, hogy: Ha Lehet(S)=-1 -> nem fizethető ki Ha Lehet(S)=0 -> Pénz(S)++ Egyébként Pénz(Lehet(S))++ és Kifizet(S-Lehet(S)) Végén a Pénz tömb megmutatja, hogy melyik pénzből mennyit kell felhasználni

Mohó algoritmus A Dinamikus Programozás úgy próbálta megközelíteni az optimalizáció problémáját, hogy több részproblémát is megoldott, majd azok eredményeit felhasználta. Felismerte továbbá, hogy megfelelő felbontás esetén az egyes részproblémák többször előkerülnek, így ha tárolnánk az eredményüket, akkor sok felesleges számolási időt spórolnánk meg.

Mohó algoritmus A Mohó Algoritmus másként közelíti meg a problémát. Azt mondja ki, hogy bizonyos esetekben nem kell végig próbálni minden lehetőséget, hanem „mohó” módon kiválasztunk egyet, és ez biztosan az optimális megoldáshoz fog vezetni.

Mohó algoritmus Első példaként nézzük meg a Fénykép típusú feladatot. A feladat: Egy rendezvény résztvevőiről tudjuk, hogy Erk(i) időpontban érkeztek, és Tav(i) időpontban távoztak a rendezvényről. Egy fotós úgy szeretne csoportképeket készíteni, hogy minden résztvevő legalább egy képen rajta legyen, és a lehető legkevesebb képet kelljen készíteni.

Mohó algoritmus A mohó elgondolás: a következő fotó elkészítésével várjunk minél tovább. Amíg nem kell mindenáron fotózni, addig ne fotózzunk. Mikor kell már mindenáron fotózni? Akkor, ha el akar menni olyan ember, aki még nem volt fotózva.

Mohó algoritmus Megoldás: Tároljuk el az összes olyan intervallumot, mely még nem szerepelt fotón. Keressük meg azt az intervallumot melynek távozási ideje a legkisebb, és készítsünk fotót ebben az időpontban. Ezután töröljük az összes olyan intervallumot, mely jelen volt a fotózásnál, és ha maradt még intervallum, arra ismételjük meg a lépéseket (a keresést, és a fotózást).

Mohó algoritmus Nézzük csak át még egyszer a lépéseket… A lépések: Rendezzük sorba az intervallumokat Tav(i) alapján. (ehhez kell egy hatékony rendező algoritmus) A sor első elemét vegyük ki, annak Tav(i) időpontjában készítsünk fotót. Mivel itt készült fotó, töröljük azokat, akik a fotó időpontja előtt érkeztek (még biztosan nem távoztak, mert a legkisebb távozási időpontot választottuk ki, így biztosan rajta vannak a fotón). HOPPÁ: Most akkor nézzük végig az összes intervallumot, avagy rendezzük át Erk(i) szerint, és utána vissza? Hát ez így elég lassú lenne…

Mohó algoritmus Ötlet ne töröljük az intervallumokat, egyszerűen csak a legkisebb Tav(i) keresésénél ne vegyük figyelembe, aki már szerepel fotón. A lépések: Tároljuk el az utolsó fotó készítésének időpontját (kezdetben 0 az értéke) Rendezzük sorba az intervallumokat Tav(i) alapján. (ehhez kell egy hatékony rendező algoritmus) A listából egyesével kivesszük az elemeket (tehát távozási idő szerint növekvő sorrendben). Ha az adott elem érkezési ideje nagyobb, mint az utolsó fotó időpontja, fotózunk (fotók számát növeljük 1-gyel, és az utolsó fotó időpontja az aktuális elem távozási ideje).

Mohó algoritmus Most már két lépésből áll a megoldási menetünk: Rendezés Minden elemmel néhány (konstans számú) lépés elvégzése A második lépés már elég gyors, hiszen lépéseinek nagyságrendje megegyezik az input méretével. A rendezésre egy logaritmikus idejű algoritmust kell alkalmazni, és a feladat meg is van oldva.

Mohó algoritmus Idei programozói OKTV döntőjének egyik feladata (11-12. kategória) 4. feladat: Lefedés (30 pont) Adott N pozitív egész szám. Keresünk legfeljebb K olyan zárt intervallumot, hogy minden megadott szám benne van valamelyik intervallumban és az intervallumok összhossza a lehető legkisebb. Minden lefedő [a,b] intervallumra teljesülni kell, hogy a<b. Az intervallum hossza a b-a érték. Készíts programot (lefed.pas , lefed.c, …), amely megadja a legkisebb összhosszú lefedő intervallumokat! Az lefed.be szöveges állomány első sorában két egész szám van, a lefedendő számok N száma (1≤N≤100000) és a lefedésre használható intervallumok számának K maximuma (1≤K≤N). A második sor pontosan N pozitív egész számot tartalmaz (egy-egy szóközzel elválasztva), a lefedendő számokat. A számok nem nagyobbak, mint 2000000. Az lefed.ki szöveges állomány első sorába a lefedő intervallumok összhosszát kell írni. A további legfeljebb K sorba kell kiírni a lefedő intervallumokat, egy sorba egy intervallum kezdő és végpontját. Az intervallumokat kezdőpontjuk szerint növekvő sorrendben kell kiírni. Több megoldás esetén bármelyik megadható. Példa: lefed.be lefed.ki 7 3 8 3 1 4 11 7 9 15 1 4 7 11 15 16

Mohó algoritmus Mohó ötlet: Legyen egy teljes intervallum a legkisebb számtól a legnagyobbik. Ez lenne a válasz, ha K=1. Egyébként keressünk meg a legnagyobb intervallumot, mely nem tartalmaz egyetlen kijelölt számot sem -> így lesz 2 intervallumunk, ha K=2, akkor ez a válasz, ha K>2 ismételjük a folyamatot.

Mohó algoritmus Először sorba rendezzük a számokat. Ezután csinálunk egy tömböt, mely intervallumokat tartalmaz. Ezt intervallumok hosszának megfelelően csökkenő sorrendbe rendezzük. Külön tömbbe kiemeljük az első (K-1) darab intervallumot majd azokat kezdőpont alapján sorba rendezzük.