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

Hasonló dokumentumok
Permutáció n = 3 esetében: Eredmény: permutációk száma: P n = n! romámul: permutări, angolul: permutation

angolul: greedy algorithms, románul: algoritmi greedy

Programozási módszertan. Mohó algoritmusok

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

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

Algoritmusok bonyolultsága

Fibonacci számok. Dinamikus programozással

Táblázatok fontosabb műveletei 1

Algoritmuselmélet. Legrövidebb utak, Bellmann-Ford, Dijkstra. Katona Gyula Y.

Algoritmusok bonyolultsága

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

Algoritmusok vektorokkal keresések 1

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

Gráfelméleti feladatok. c f

2. Visszalépéses keresés

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

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

Algoritmuselmélet. Gráfok megadása, szélességi bejárás, összefüggőség, párosítás. Katona Gyula Y.

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

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

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

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

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

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

Kupac adatszerkezet. 1. ábra.

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

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

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

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

Adatszerkezetek 7a. Dr. IványiPéter

Bevezetés a játékelméletbe Kétszemélyes zérusösszegű mátrixjáték, optimális stratégia

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

Felvételi tematika INFORMATIKA

Dinamikus programozás II.

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.

Mesterséges intelligencia 1 előadások

INFORMATIKA javítókulcs 2016

Neumann János Tehetséggondozó Program Gráfalgoritmusok II.

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

INFORMATIKA tétel 2019

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

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

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

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 31. Széchenyi István Egyetem, Gy r

Mesterséges intelligencia 2. laborgyakorlat

14. Mediánok és rendezett minták

10. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 28.

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

Számítógépes geometria (mester kurzus)

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

Visszalépéses keresés

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

/* Az iter függvény meghívása és a visszatérő érték átadása a gyok változóba */ gyok = iter( n, a, e ) ;

BACKTRACKING Visszalépéses keresés

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

Mátrixjátékok tiszta nyeregponttal

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

I. ALAPALGORITMUSOK. I. Pszeudokódban beolvas n prim igaz minden i 2,gyök(n) végezd el ha n % i = 0 akkor prim hamis

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

Diszkrét matematika I., 12. előadás Dr. Takách Géza NyME FMK Informatikai Intézet takach november 30.

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

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.

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

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

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

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

Mátrixok 2017 Mátrixok

Lineáris programozás. Modellalkotás Grafikus megoldás Feladattípusok Szimplex módszer

BASH script programozás II. Vezérlési szerkezetek

Funkcionális Nyelvek 2 (MSc)

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

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.

Fejezetek a lineáris algebrából PTE-PMMK, Műszaki Informatika Bsc. Dr. Kersner Róbert

Mohó algoritmusok. Példa:

Mer legesség. Wettl Ferenc Wettl Ferenc Mer legesség / 40

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.

S z á m í t ó g é p e s a l a p i s m e r e t e k

Megoldott feladatok. Informatika

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

út hosszát. Ha a két várost nem köti össze út, akkor legyen c ij = W, ahol W már az előzőekben is alkalmazott megfelelően nagy szám.

Mesterséges Intelligencia I. (I602, IB602)

Algoritmuselmélet 7. előadás

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

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

Elemi alkalmazások fejlesztése I. Olvassunk be egy fájlból egész számokat egy tömbbe. Keressük meg a tömb valamely

Tuesday, March 6, 12. Hasító táblázatok

Operációkutatás. 4. konzultáció: Szállítási feladat. A feladat LP modellje

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

Érdekes informatika feladatok

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Adatszerkezetek 2. Dr. Iványi Péter

ROMEO OpenTherm távvezérlés

Számjegyes vagy radix rendezés

Megjegyzés: A programnak tartalmaznia kell legalább egy felhasználói alprogramot. Példa:

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

OKTV 2006/2007. Informatika II. kategória döntő forduló Feladatlap

Lineáris algebra gyakorlat

Erdélyi Magyar TudományEgyetem (EMTE

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Rendezettminta-fa [2] [2]

Átírás:

Dinamikus programozás Oszd meg, és uralkodj! Mohó stratégia Melyiket válasszuk? Dinamikus programozás vagy Oszd meg, és uralkodj! Háromszögfeladat rekurzívan: c nj := a nj ha 1 j n c ij := a ij + max{c i+1,j, c i+1,j+1 }, ha n > i 1, 1 j i Hsz-rek(i, j) 1. if c i,j = 1 2. then if i = n 3. then c i,j := a i,j ( 4. else c i,j := a i,j + max Hsz-rek(i + 1, j), ) Hsz-rek(i + 1, j + 1) 5. return c i,j Kezdetben minden c ij := 1, az eljárás hívása k := Hsz-rek(1, 1). 1

nem rekurzív rekurzív 2

Mátrixszorzás rekurzívan c ij = { 0 ha i = j min { c ik + c k+1,j + d i 1 d k d j } ha n > i > j, i k < j n. M-rek(i, j) 1. if c i,j = 1 2. then c i,j := 3. for k := i to j 1 4. do t := M-rek(i, k) + M-rek(k + 1, j) + d i 1 d k d j 5. if t < c i,j 6. then c i,j := t 7. c j,i := k 8. return c i,j Hívás el tt minden c ij -t a f átló fölött 1-re állítunk, a f átló elemeit pedig 0-ra. A hívás k := M-rek(1, n). A zárójelezés ugyanúgy történik. 3

Szövegátalakítás a 1 a 2... a n szöveg átalakítása b 1 b 2... b m szöveggé minimális m velettel: bet csere, bet beillesztrése, bet törlése. c ij minimális m veletszám (távolság) a 1 a 2... a i átalakítására b 1 b 2... b j -vé. i ha i = 0, n, j = 0 j ( ha i = 0, j = 1, m c ij = min c i 1,j 1 + [a i b j ], c i 1,j + 1, ) c i,j 1 + 1 ha i = 1, n, j = 1, m ahol [feltétel] = { 1 ha feltétel igaz 0 ha f eltétel hamis 4

iteratív megoldás Iteratív(a, b) 1. n := hossz[a] 2. m := hossz[b] 3. for i := 0 to n 4. do c i,0 := i 5. for j := 0 to m 6. do c 0,j := j 7. for i := 1 to n 8. do for j := 1 to m 9. do x := c i 1,j 1 10. if a i b j 11. then x := x + 1 12. c i,j := min(x, c i 1,j + 1, c i,j 1 + 1) 13. return C 5

rekurzív megoldás Távolság(i, j) 1. if c i,j = 1 2. then if i = 0 3. then c i,j := j 4. if j = 0 5. then c i,j := i 6. if (i > 0) és (j > 0) 7. then x := Távolság(i 1, j 1) 8. if a i b j 9. then x ( := x + 1 10. c i,j := min x, Távolság(i 1, j) + 1, ) Távolság(i, j 1) + 1 11. return c i,j Hívás: minden i és j értékre beállítjuk: c i,j := 1. Majd: k := Távolság(n, m). Például: a = P OLINOMIÁLIS b = EXP ONENCIÁLIS 6

C: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 1 1 2 2 3 4 5 6 7 8 9 10 11 12 2 2 2 3 2 3 4 5 6 7 8 9 10 11 3 3 3 3 3 3 4 5 6 7 8 8 9 10 4 4 4 4 4 4 4 5 6 6 7 8 8 9 5 5 5 5 5 4 5 4 5 6 7 8 9 9 6 6 6 6 5 5 5 5 5 6 7 8 9 10 7 7 7 7 6 6 6 6 6 6 7 8 9 10 8 8 8 8 7 7 7 7 7 6 7 8 8 9 9 9 9 9 8 8 8 8 8 7 6 7 8 9 10 10 10 10 9 9 9 9 9 8 7 6 7 8 11 11 11 11 10 10 10 10 10 9 8 7 6 7 12 12 12 12 11 11 11 11 11 10 9 8 7 6 P O L I N O M I Á L I S E X P O N E N C I Á L I S Haladás a C mátrixban: átlósan: vagy csere vagy marad lefele: törlés vízszintesen: beszúrás 7

Nyomkövetés(i, j) 1. if (i > 0) és (j > 0) 2. then d := c i 1,j 1 3. if a i b j 4. then d := d + 1 5. if c i,j = d 6. then Nyomkövetés(i 1, j 1) 7. else if c i,j = c i 1,j + 1 8. then Nyomkövetés(i 1, j) 9. else Nyomkövetés(i, j 1) 10. else if i > 0 11. then Nyomkövetés(i 1, j) 12. else if j > 0 13. then Nyomkövetés(i, j 1) 14. kiír i, j Hívás: Nyomkövetés(n, m) Eredmény példánkban: (0, 0), (0, 1), (0, 2), (1, 3), (2, 4), (3, 5), (4, 6), (5, 7), (6, 7), (7, 8), (8, 9), (9, 10), (10, 11), (11, 12), (12, 13) 8

Egyéb feladatok, amelyek inkább dinamikus megközelítés ek, mint "oszd meg, és uralkodj" típusúak. Kombinációk C k n = ( ) n k = { 1, ha k = 0 vagy k = n Cn 1 k + Cn 1 k 1 ha 0 < k < n. Kombináció(n, k) 1. if c nk = 1 2. then if (k = 0) vagy (k = n) 3. then c nk := 1 4. else c nk := Kombináció(n 1, k) + Kombináció(n 1, k 1) 5. return c nk Fibonacci-számok Ackermann-függvény 9

Egér és sajt a labirintusban Az egért l szélességi bejárást folytatunk, amíg eljutunk a sajthoz. A C mátrixban rizzük a távolságokat. A Q sorban rizzük a szomszédok koordinátáit. Az m n-es labirintus falai 1-esek, a folyosók 0-k. Az egér kordinátái: (xe, ye), a sajt koordinátái: (xs, ys). Egér-sajt 1. for i := 1 to m 2. do for j := 1 to n 3. do if a i,j = 0 4. then c i,j := 1 5. c xe,ye := 0 6. Betesz(xe, ye) 7. while (Q nem üres) 8. do Kivesz(x, y) 9. for (i, j) szomszédjára (x, y)-nak 10. if (a ij = 0) és (c ij = 1) 11. then c i,j := c x,y + 1 12. Betesz(i, j) 13. if (i = xs) és (j = ys) 14. then exit while 15. if Q üres 16. then return Nincs megoldás 17. else return c xs,ys 10

m = 6, n = 7 0 0 0 0 0 0 0 s 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 e 0 0 0 0 0 0 0 0 0 0 0 Legrövidebb út hossza: 5. 1 5 4 5 1 1 1 s 0 3 4 0 1 1 4 0 2 3 4 5 1 3 2 1 0 3 0 1 2 1 e 1 2 3 4 3 2 1 2 3 4 5 11

Mohó stratégia vagy dinamikus programozás A hátizsák kapacitása G, ezt kell megtölteni a g 1, g 2,..., g n tömeg, a 1, a 2,..., a n érték (árú) tárgyakkal, hogy ne szakadjon el, és az összérték maximális legyen. c i (i = 1, 2,..., G) rzi az i tömeggel megtöltött zsák értékét. d ij (i = 0, 1, 2,..., G, j = 1, 2,..., n) rzi az i tömeggel megtöltött zsák esetében az optimális megoldást (d ij = 1, ha a j-edik tárgy benne van zsákban, és 0 különben). Kezdetben minden c i = 1 (i = 1, 2,..., G) és d ij = 0 (i = 0, 1, 2,..., G, j = 1, 2,..., n). Az i-edik tárgy akkor kerül a megoldásba, ha nélküle az s g i tömeg esetében optimális részmegoldás van. 12

Hátizsák 0. c 0 = 0 1. for s := 1 to G 2. do for i := 1 to n 3. do if s g i 0 4. then if (c s gi 1) és (d s gi,i = 0) és (c s gi + a i > c s ) 5. then c s := c s gi + a i 6. k := i 7. if c s 1 8. then for j := 1 to n 9. do d s,j := d s gk,j 10. d s,k := 1 11. return c, d Eredmény: a legnagyobb c[s] és d-nek a s-edik sora. Példa: súlyok: 5 4 5 3 4 G = 15 értékek (árak): 10 20 6 3 30 optimum: 60 megoldás: (1,1,0,0,1) 13

A d mátrix és a c vektor elemei: d 1 2 3 4 5 c elemei 0 0 0 0 0 0 0 1 0 0 0 0 0 1 2 0 0 0 0 0 1 3 0 0 0 1 0 3 4 0 0 0 0 1 30 5 1 0 0 0 0 10 6 1 0 0 0 0 1 7 0 0 0 1 1 33 8 0 1 0 0 1 50 9 1 0 0 0 1 40 10 1 0 1 0 0 16 11 0 1 0 1 1 53 12 1 0 0 1 1 43 13 1 1 0 0 1 60 14 1 0 1 0 1 46 15 0 0 1 0 0 1 Megoldás: Max. = 60 1 1 0 0 1 14

Az ECN programozási verseny 2009 egyik feladata Legkevesebb palindrom Adott egy a 1 a 2... a n füzér. Bontsuk fel minimális számú palindrommá! Legyen c ij az a i a i+1... a j füzér palindromjainak minimális száma. Ekkor C = ( c ij ) ahol : c ij = 1, ha i j 1, ha a i = a j és c i+1,j 1 = 1 min(c i,k + c k+1,j ), különben c 1n megadja a palindromok minimális számát Például: aaba felbontása: a, aba 1 1 2 2 1 1 2 1 C = 1 1 1 2 1 1 1 1 15

abaabbaaaa felbontása: aba, abba, aaa 1 2 1 2 2 3 2 3 3 3 1 1 2 2 1 2 3 2 3 3 1 1 1 1 2 2 2 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 1 1 1 1 2 2 2 2 C = 1 1 1 1 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 MinPalindrom(a) 1. n := hossz[a] 2. for i := 1 to n 3. do for j := 1 to i 4. do c i,j := 1 5. for i := n 1 downto 1 6. do for j := i + 1 to n 7. ( ) ( do if a i = a j és ci+1,j 1 = 1 ) 8. then c ij := 1 9. else c ij := min k=i,...,j 1 10. return C (c i,k + c k+1,j ) 16

A palindromok meghatározása: Palindromok(a, C) 0. n := hossz[a] 1. i := 1 2. repeat 3. k := i 4. while c i,n c i,k + c k+1,n 5. do k := k + 1 6. kiír a i a i+1... a k 7. i := k + 1 8. until i > n vagy c in = 1 9. if i n 10. then kiír a i a i+1... a n 11. return 17