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

Hasonló dokumentumok
Adatszerkezetek II. 6. előadás

Informatikai tehetséggondozás:

Mohó stratégia. A mohó stratégia elemei

Mohó stratégia. Az előadás Horváth Gyula tananyagai felhasználásával készült. Mohó stratégia :20 2/80

Mohó stratégia. Az előadás Horváth Gyula tananyagai felhasználásával készült. Mohó stratégia

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

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

A 2012/2013 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. II. (programozás) kategória

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

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

angolul: greedy algorithms, románul: algoritmi greedy

Kombinatorikai algoritmusok. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Kombinatorikai algoritmusok

Adatszerkezetek II. 10. előadás

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

Adatszerkezetek II. 2. előadás

Gráfok bejárása. Szlávi Péter, Zsakó László: Gráfok II :17

O k t a t á si Hivatal

Programozási módszertan. Mohó algoritmusok

Programozási tételek. Dr. Iványi Péter

A 2010/2011 tanévi Országos Középiskolai Tanulmányi Verseny döntő fordulójának megoldása. II. (programozás) kategória

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

PROGRAMOZÁSI TÉTELEK

Informatikai tehetséggondozás:

Mohó algoritmusok. Példa:

A 2012/2013 tanévi Országos Középiskolai Tanulmányi Verseny második fordulójának megoldása. informatika II. (programozás) kategória

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

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

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

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

Programozási segédlet

Felvételi tematika INFORMATIKA

Informatikai tehetséggondozás:

Nemes Tihamér Nemzetközi Informatikai Tanulmányi Verseny 2-3. korcsoport. Maximális növekedés

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

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

Multihalmaz, intervallumhalmaz

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

A 2013/2014 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

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

Algoritmizálás, adatmodellezés 10. előadás

Adatszerkezetek II. 7. előadás

Adatbázis rendszerek Gy: Algoritmusok C-ben

Ütemezési problémák. Kis Tamás 1. ELTE Problémamegoldó Szeminárium, ősz 1 MTA SZTAKI. valamint ELTE, Operációkutatási Tanszék

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

Visszalépéses kiválogatás

Algoritmusok és adatszerkezetek I. 10. előadás

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

A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny második fordulójának feladatai. INFORMATIKA II. (programozás) kategória

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus.

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

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

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

Dinamikus programozás II.


A 2007/2008 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. II. (programozás) kategória

Táblázatos adatok használata

Közismereti informatika I. 4. előadás

Az optimális megoldást adó algoritmusok

INFORMATIKA javítókulcs 2016

5. MODUL ADATBÁZIS-KEZELÉS

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

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

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

A 2015/2016 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

ELEMI PROGRAMOZÁSI TÉTELEK

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

Informatikai tehetséggondozás:

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

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

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

Rendezések. Összehasonlító rendezések

Mátrixjátékok tiszta nyeregponttal

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

Gráfelméleti alapfogalmak

OKTV 2005/2006 döntő forduló

1. a. Vegye fel az alábbi táblázatban szereplő adatokat! Ügyeljen a táblázatban szereplő

Informatikai tehetséggondozás:

Matematika alapjai; Feladatok

Down Alapítvány 1145 Budapest, Amerikai út 14. Tel.: (061) Munkába állás

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

Általános algoritmustervezési módszerek

Minta felvételi feladatsor programozásból

1. numere.txt n (1 n 10000) n növekvő kilenc a) Pascal/C++ Például: NUMERE.TXT

PROGRAMOZÁSI NYELVEK (GYAKORLAT)

Ütemezési feladatok. Az ütemezési feladatok vizsgálata az 50-es évek elején kezdődött, majd

10. Szimultán kiválasztások

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.

Egész számok. pozitív egész számok: 1; 2; 3; 4;... negatív egész számok: 1; 2; 3; 4;...

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











Átírás:

I.

Feladat: Egy kábelhálózat különböző csatornáin N filmet játszanak. Ismerjük mindegyik film kezdési és végidejét. Egyszerre csak 1 filmet tudunk nézni. Add meg, hogy maximum hány filmet nézhetünk végig! Megoldás: A megoldás egy N elemű halmaz legnagyobb, adott tulajdonsággal rendelkező részhalmazának kiválasztása. Probléma: egy N elemű halmaznak 2 N részhalmaza van. Az előadás Horváth Gyula tananyagai felhasználásával készült. 2/32

Ötlet: Rendezzük sorba a filmeket befejezési idejük szerint növekvő sorrendbe! Ha a leghamarabb befejeződőt választjuk, akkor lesz a legtöbb lehetőségünk a többi közül választani. Legrövidebb választása nem jó. Leghamarabb kezdődő elölről haladva nem jó. 3/32

Megoldás-1: Filmek (események) száma: N. Kezdőidők: K i. Végidők: V i. Eredeti (rendezés előtti) sorszám: S i. Kiválogatás(N,K,V,Db,X): Rendezés(N,K,V,S) Db:=1; X(Db):=S(1); j:=1 Ciklus i=2-től N-ig Ha K(i) V(j) akkor Db:=Db+1; X(Db):=S(i) j:=i Eljárás vége. 4/32

Megoldás-2: Filmek (események) száma: N. Kezdőidők: K i. Végidők: V i. Kezd j : a j-ben végződő, legkésőbb kezdődő film kezdete, S j a sorszáma. 1 K i,v i M. Kiválogatás(N,K,V,Db,X): Db:=0; idő:=0; Kezdetek(N,K,V,Kezd,S) Ciklus i=1-től M-ig Ha S(i) 0 és idő Kezd(i) akkor Db:=Db+1; X(Db):=S(i); idő:=i Eljárás vége. 5/32

Megoldás-2: Kezd j előállítása: Kezdetek(N,K,V,Kezd,S): Kezd:=(0,,0); S:=(0,,0) Ciklus i=1-től N-ig Ha K(i)>Kezd(V(i)) akkor Kezd(V(i)):=K(i); S(V(i)):=i Eljárás vége. 6/32

Feladat: Egy vállalkozó 1 napos munkákat vállal. Ismerjük mindegyik munka határidejét. N napot dolgozik, N igényt kapott. Egy nap csak 1 munkát végezhet. Add meg, hogy maximum hány munkát vállalhat el! Megoldás: A megoldás egy N elemű halmaz legnagyobb, adott tulajdonsággal rendelkező részhalmazának kiválasztása. Probléma: egy N elemű halmaznak 2 N részhalmaza van. 7/32

Ötlet: Tegyünk minden munkát a legutolsó napra, amikor még elvégezhető! Ezzel a lehető legkevesebb másik munka elvállalását akadályozzuk meg. Megoldás 1 : Vegyük sorra a munkákat és mindegyiknek keressük meg a határideje előtt utolsó szabad napot! 8/32

Megoldás-1: Kiválogatás(N,H,Db,Nap): Db:=0; Nap():=(0,,0) Ciklus i=1-től N-ig Ciklus amíg H(i)>0 és Nap(H(i))>0 H(i):=H(i)-1 Ha H(i)>0 akkor Db:=Db+1; Nap(H(i)):=i Eljárás vége. Futási idő: O(N 2 ) 9/32

Megoldás-2: Rendezzük sorba a munkákat H(i) szerint! Egy munka elvégezhető a határidejére, ha kevesebbet választottunk ki előtte, mint a határideje. Tegyük a munkát az első szabad napra! Kiválogatás(N,H,Db,Nap): Rendezés(N,H,S) Db:=1; Nap(Db):=S(1) Ciklus i=2-től N-ig Ha Db<H(i) akkor Db:=Db+1; Nap(Db):=S(i) Eljárás vége. Futási idő: O(N)+rendezésidő 10/32

Feladat: Egy vállalkozó 1 napos munkákat vállal. Ismerjük mindegyik munka határidejét. Egy nap csak 1 munkát végezhet. Az egyes munkákért különböző bért kaphat. Add meg, hogy maximum mennyit kereshet! Megoldás: A megoldás egy N elemű halmaz legnagyobb értékű, adott tulajdonsággal rendelkező részhalmazának kiválasztása. Probléma: egy N elemű halmaznak 2 N részhalmaza van. 11/32

Ötlet: Rendezzük sorba a munkákat az összeg szerint csökkenő sorrendbe! Tegyünk minden munkát a legutolsó napra, amikor még elvégezhető! Ezzel a lehető legkevesebb másik munka elvállalását akadályozzuk meg és csak nála olcsóbbakat. Megoldás: Vegyük sorra a munkákat és mindegyiknek keressük meg a határideje előtt utolsó szabad napot! 12/32

Megoldás: Kiválogatás(N,H,Ár,Db,Nap): Rendezés(N,H,Ár,S) Db:=0; Nap():=(0,,0) Ciklus i=1-től N-ig Ciklus amíg H(i)>0 és Nap(H(i))>0 H(i):=H(i)-1 Ha H(i)>0 akkor Db:=Db+1; Nap(H(i)):=S(i) Eljárás vége. Futási idő: O(N 2 ) 13/32

Legyen U(i) az i. helytől visszafelé az utolsó foglalt! x:=h(i) Ha szülő(x)=-1 akkor Db:=Db+1; Nap(x):=S(i) szülő(x+1):=x különben Ciklus amíg szülő(x)>-1 x:=szülő(x) Ha x>0 akkor Db:=Db+1; Nap(x):=S(i) szülő(h(i)):=x Futási idő: O(N 2 ) 14/32

Feladat: Egy rendezvényre N vendég érkezik. Ismerjük mindegyiknek az érkezési és a távozási idejét. A résztvevőket fényképeken szeretnénk megörökíteni. Add meg, hogy minimum hányszor kell fényképet készíteni! Megoldás: A megoldás a lehetséges időpontok halmaza legkisebb, adott tulajdonsággal rendelkező részhalmazának kiválasztása. Probléma: egy N elemű halmaznak 2 N részhalmaza van. 15/32

Megoldás: Akkor fényképezzünk, amikor feltétlenül szükséges! Ez azt jelenti, hogy amikor elmenne az első ember, aki még nem volt rajta egy fényképen sem, akkor fényképeznünk kell. 16/32

Megoldás: Emberek (események) száma: N. Érkezési idők: E i. Távozási idők: T i. Kiválogatás(N,E,T,Db,X): Rendezés(N,E,T) Db:=0; X(Db):=T(1); j:=1 Ciklus i=2-től N-ig Ha E(i) T(j) akkor Db:=Db+1; X(Db):=T(i) j:=i Eljárás vége. A megoldás szó szerint azonos a filmes feladat megoldásával! 17/32

Feladat: Egy rendezvényre N vendég érkezik. Ismerjük mindegyiknek az érkezési és a távozási idejét. A résztvevőket fényképeken szeretnénk megörökíteni. A fényképészt K perces időintervallumokra fizetjük. Add meg, hogy minimum hány intervallumra kell fizetni! Megoldás: A megoldás a lehetséges időpontok halmaza legkisebb, adott tulajdonsággal rendelkező részhalmazának kiválasztása. 18/32

Megoldás: Akkor fényképezzünk, amikor feltétlenül szükséges! Ez azt jelenti, hogy amikor elmenne az első ember, aki még nem volt rajta egy fényképen sem, akkor kezdődik egy fényképezési intervallum. 19/32

Megoldás: Emberek (események) száma: N. Érkezési idők: E i. Távozási idők: T i. Eredeti (rendezés előtti) sorszám: S i. Kiválogatás(N,E,T,K,Db,X): Rendezés(N,E,T,S) Db:=1; X(Db):=S(1); j:=1 Ciklus i=2-től N-ig Ha E(i) T(j)+K akkor Db:=Db+1; X(Db):=S(i) j:=i Eljárás vége. 20/32

Feladat: Egy rendezvényre N vendég érkezik. Ismerjük mindegyiknek az érkezési és a távozási idejét, érkezés szerinti sorrendben. A résztvevőket fényképeken szeretnénk megörökíteni. A fényképész minél hamarabb szeretne végezni, ezért amint jelen van legalább K vendég, akkor közülük pontosan K vendéget lefényképez egy csoportképen, azaz csak abban dönthet, hogy adott időpontban kiket fényképez le. Egy időpontban csak egy fényképet tud készíteni, és minden vendég legfeljebb 1 képen szerepelhet. Adjuk meg, hogy maximum hány fényképet készíthet, és kik lesznek a képeken! 21/32

Megoldás: A vendégek sorszámát érkezési időkor egy távozási idő szerinti prioritási sorba tesszük. Az időt léptetjük. Az aktuális időpont előtt távozókat kivesszük a prioritási sorból ők nem lesznek rajta fényképen. Az aktuális időpontban érkezők sorszámát betesszük a prioritási sorba. Ha a prioritási sorban van legalább K elem, akkor őket kiírjuk az eredménybe ők lesznek fényképen. Legyen E(N+1) a távozási idők maximuma+1! 22/32

Megoldás: Emberek (események) száma: N. Érkezési idők: E i. Távozási idők: T i. Kiválogatás(N,E,T,Db,X): Db:=0; i:=1 Ciklus idő=e(1)-től E(N+1)-ig Ciklus amíg a sor nem üres és T(első)<idő PrSorból(x)... 23/32

... Ciklus amíg i N és E(i)=idő PrSorba(i); i:=i+1 Ha sorelemszám K akkor Ciklus j=1-től K-ig PrSorból(kep(Db*K+j)) Db:=Db+1 Elágazás vége Eljárás vége. 24/32

Feladat: Egy rendezvényre N vendég érkezik. Ismerjük mindegyiknek az érkezési és a távozási idejét. A résztvevőket fényképeken szeretnénk megörökíteni, két feltétellel: 1. Minden képen pontosan két vendég legyen rajta. 2. Minden vendég legfeljebb egy képen szerepelhet. Add meg, hogy maximum hányan lehetnek rajta a képeken! Többféleképpen fordulhat elő, hogy nem tudunk mindenkit lefényképezni. 25/32

Megoldás: Rendezzük sorba távozási idő szerint az adatainkat. Ha valakinek még nincs párja a fényképezkedéshez, akkor válasszunk olyat párjának, aki ott van és a leghamarabb menne el! 26/32

Emberek (események) száma: N. Érkezési idők: E i. Távozási idők: T i. Eredeti (rendezés előtti) sorszám: S i. Kiválogatás(N,E,T,Db,Pár): Rendezés(N,E,T,S); Db:=0 Ciklus i=2-től N-ig j:=1 Ciklus amíg j<i és nem(pár(j)=0 és E(i)<T(j)) j:=j+1 Ha j<i akkor Pár(j):=i; Pár(i):=j; Db:=Db+1 Eljárás vége. 27/32

Feladat: N-féle pénzjegyünk van, P 1, P 2,, P n címletű (P i <P i+1 ). Add meg, hogy minimálisan melyek felhasználásával fizethető ki az F összeg! Feltehetjük, hogy minden pénzjegyből tetszőleges számú van. Megoldás: Vegyünk a legnagyobb címletű pénzjegyből, amennyi szükséges, majd a maradék összeget fizessük ki a nála kisebb pénzjegyekkel! 28/32

Pénzváltás(N,P,F,Db): i:=n Ciklus amíg F>0 és i>0 db(i):=f div P(i); F:=F mod P(i) i:=i-1 Eljárás vége. Probléma: P=(1,3,4), F=6 esetén a megoldás (2,0,1), azaz 3 pénzjeggyel fizetnénk ki a 6 forintot, pedig 6=3+3! A helyes működés feltétele: 2*P(i) P(i+1). 29/32

Feladat: N darab pénzjegyünk van, P 1, P 2,, P n címletű (P i P i+1 ). Add meg, hogy minimálisan melyek felhasználásával fizethető ki az F összeg! Megoldás: Vegyünk a legnagyobb címletű pénzjegyből egyet, ha szükséges, majd a maradék összeget fizessük ki a nála kisebb pénzjegyekkel! 30/32

Pénzváltás(N,P,F,Kell): i:=n; Kell():=(hamis,,hamis) Ciklus amíg F>0 és i>0 Ha F P(i) akkor Kell(i):=igaz; F:=F-P(i) i:=i-1 Eljárás vége. Probléma: P=(1,1,3,3,4), F=6 esetén a megoldás (i,i,h,h,i), azaz 3 pénzjeggyel fizetnénk ki a 6 forintot, pedig 6=3+3! A helyes működés feltétele: P(i)=P(i+1) vagy 2*P(i) P(i+1). P=(1,3,3,4), F=6 esetén nem lesz megoldás, pedig 6=3+3! Itt a mohó ötlet csak nagyon ritka, véletlenszerű esetekben használható! 31/32

A mohó stratégia elemei 1. Fogalmazzuk meg az optimalizációs feladatot úgy, hogy választások sorozatával építjük fel a megoldást! 2. Mohó választási tulajdonság: Mutassuk meg, hogy mindig van olyan megoldása az eredeti feladatnak, amely a mohó választással kezdődik! 3. Optimális részprobléma tulajdonság: Bizonyítsuk be, hogy a mohó választással olyan redukált problémát kapunk, amelynek optimális megoldásához hozzávéve a mohó választást, az eredeti probléma megoldását kapjuk! Az előadás Horváth Gyula tananyagai felhasználásával készült. 32/32