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

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

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

Programozási módszertan. Mohó algoritmusok

Fibonacci számok. Dinamikus programozással

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

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

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

Algoritmusok bonyolultsága

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

Dinamikus programozás II.

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

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

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

2015, Diszkrét matematika

Integrált gyártórendszerek

minden x D esetén, akkor x 0 -at a függvény maximumhelyének mondjuk, f(x 0 )-at pedig az (abszolút) maximumértékének.

2. Visszalépéses keresés

Gráfelméleti feladatok. c f

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

Mohó algoritmusok. Példa:

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

angolul: greedy algorithms, románul: algoritmi greedy

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

Dr. Schuster György február / 32

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

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

Knuth-Morris-Pratt algoritmus

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

Sorozatok és Sorozatok és / 18

1. Házi feladat. Határidő: I. Legyen f : R R, f(x) = x 2, valamint. d : R + 0 R+ 0

INFORMATIKA javítókulcs 2016

Az optimális megoldást adó algoritmusok

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

Java programozási nyelv

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

Funkcionálanalízis. n=1. n=1. x n y n. n=1

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

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

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

Általános algoritmustervezési módszerek

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

Programozási Módszertan definíciók, stb.

Eötvös Loránd Tudományegyetem Informatikai Kar. Analízis 1. Írásbeli beugró kérdések. Készítette: Szántó Ádám Tavaszi félév

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

Algoritmuselmélet 2. előadás

Ajánlott elemi feladatok az AAO tárgyhoz 41 feladat

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.

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

2. Visszalépéses stratégia

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.

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Sorozatok határértéke SOROZAT FOGALMA, MEGADÁSA, ÁBRÁZOLÁSA; KORLÁTOS ÉS MONOTON SOROZATOK

Számsorozatok (1) First Prev Next Last Go Back Full Screen Close Quit

Analízis I. Vizsgatételsor

NEM-DETERMINISZTIKUS PROGRAMOK HELYESSÉGE. Szekvenciális programok kategóriái. Hoare-Dijkstra-Gries módszere

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

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

Bonyolultságelmélet. Monday 26 th September, 2016, 18:50

Alapfogalmak, valós számok Sorozatok, határérték Függvények határértéke, folytonosság A differenciálszámítás Függvénydiszkusszió Otthoni munka

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

Véges automaták, reguláris nyelvek

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

Osztott algoritmusok

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

2010. október 12. Dr. Vincze Szilvia

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

Diszkrét matematika 2.C szakirány

GAZDASÁGMATEMATIKA KÖZÉPHALADÓ SZINTEN

2016, Diszkrét matematika

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

2018, Diszkrét matematika

32. A Knuth-Morris-Pratt algoritmus

Bevezetés a matematikába (2009. ősz) 1. röpdolgozat

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

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI

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

6. gyakorlat. Gelle Kitti. Csendes Tibor Somogyi Viktor. London András. jegyzetei alapján

Fonyó Lajos: A végtelen leszállás módszerének alkalmazása. A végtelen leszállás módszerének alkalmazása a matematika különböző területein

Kronecker-modulusok kombinatorikája és alkalmazások

Gauss-Seidel iteráció

ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha

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

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

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

Algoritmuselmélet 1. előadás

Dinamikus programozás

2016, Diszkrét matematika

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.

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

Diszkrét matematika 2.

1. tétel - Gráfok alapfogalmai

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

1. Generátorrendszer. Házi feladat (fizikából tudjuk) Ha v és w nem párhuzamos síkvektorok, akkor generátorrendszert alkotnak a sík vektorainak

Hamilton-körök és DNS molekulák

KOVÁCS BÉLA, MATEMATIKA I.

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

17. előadás: Vektorok a térben

f(x) a (x x 0 )-t használjuk.

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

Átírás:

PM-07 p. 1/13 Programozási módszertan Dinamikus programozás: A leghosszabb közös részsorozat Werner Ágnes Villamosmérnöki és Információs Rendszerek Tanszék e-mail: werner.agnes@virt.uni-pannon.hu

PM-07 p. 2/13 Dinamikus programozás jellemzői Egy dinamikus programozási algoritmus kifejlesztése 4 lépésre bontható fel: 1. Jellemezzük az optimális megoldás szerkezetét. 2. Rekurzív módon definiáljuk az optimális megoldás értékét. 3. Kiszámítjuk az optimális megoldás értékét alulról felfelé történő módon. 4. A kiszámított információk alapján megszerkesztünk egy optimális megoldást.

PM-07 p. 3/13 Bevezetés Biológiai alkalmazásokban gyakran össze kell hasonlítani pl. két vagy több élőlény DNS-ét. A DNS-t bizonyos, bázisnak nevezett molekulák szekvenciái alkotják. A lehetséges bázisok: adenin, guanin, citozin és timin. A bázisokat a kezdőbetűjükkel jelöljük. A DNS szerkezete leírható a véges [A, C, G, T] halmazon vett sztringgel. Pl. az egyik élőlény DNS-e S 1 = ACCGGTCGAGTGCGCGGAAGCCGGCCGAA a másik élőlény DNS-e S 2 = GTCGTTCGGAATGCCGTTGCTCTGTAAA Két élőlény DNS-ét pl. abból a célból hasonlíthatjuk össze, hogy megállapítsuk, hogy mennyire hasonlóak. (valamilyen mérték szerint a két lény mennyire közel áll egymáshoz)

PM-07 p. 4/13 Összehasonlítás A hasonlóságot több féle képpen definiálhatjuk: két DNS szekvencia hasonló, ha az egyik a másiknak részsztringje, két szekvencia hasonló, ha kevés változtatással vihetők át egymásba, keresünk egy olyan S 3 szekvenciát, amelyik olyan bázisokból áll, amelyek ugyanabban a sorrendben, de nem feltétlenül egymás után fordulnak elő mind S 1 -ben, mind S 2 -ben; minél hosszabb, annál nagyobb a hasonlóság. A példában: a leghosszabb S3 szekvencia S 1 = ACCGGTCGAGTGCGCGGAAGCCGGCCGAA S 2 = GTCGTTCGGAATGCCGTTGCTCTGTAAA S 3 = GTCGTCGGAAGCCGGCCGAA

PM-07 p. 5/13 Részsorozat, közösrészsorozat Egy sorozat részsorozata egy olyan sorozat, amit az adott sorozatból néhány elem elhagyásával nyerünk. Formálisan: Ha az adott X = (x 1,x 2,...,x m ), akkor egy másik sorozat Z = (z 1,z 2,...,z k ) sorozat akkor részsorozata X-nek, ha létezik X indexeinek egy szigorúan növő (i 1,i 2,...,i k ) sorozata, hogy minden j = 1,2,...,k esetén x ij = z j. Adott két sorozat, X és Y. Azt mondjuk, hogy egy Z sorozat közös részsorozatuk, ha Z részsorozata X-nek is és Y -nak is.

PM-07 p. 6/13 A leghosszabb közös részsorozat=lkr 1. lépés: A leghosszabb közös részsorozat jellemzése A feladat megoldásának egyik módszere leszámolni X összes részsorozatát és mindegyiket ellenőrizni, hogy részsorozata-e Y -nak és tárolnunk kell a megtalált leghosszabb részsorozatot. X mindegyik részsorozata az 1,2,...,m indexhalmaz egy részhalmazának felel meg. Mivel X-nek 2 m részsorozata van, az eljárás exponenciális időt igényel. Az algoritmus használhatatlan. Ez a probléma azonban rendelkezik az optimális részstruktúra tulajdonsággal.

PM-07 p. 7/13 Az LKR optimális részstruktúrája Az X = (x 1,x 2,...,x m ) sorozat i-edik prefixe X i = (x 1,x 2,...,x i ) (i = 0,1,...,m). Tétel: (Az LKR optimális részstruktúrája.) Legyen X = (x 1,x 2,...,x m ) és Y = (y 1,y 2,...,y n ) két sorozat és Z = (z 1,z 2,...,z k ) ezek egy LKR-je. Ekkor igazak a következő állítások: 1. Ha x m = y n, akkor z k = x m = y n és Z k 1 az X m 1 és Y n 1 egy LKR-je. 2. Ha x m y n, akkor z k x m esetén Z az X m 1 és Y egy LKR-je. 3. Ha x m y n, akkor z k y n és Z az X és Y n 1 egy LKR-je.

PM-07 p. 8/13 Az LKR optimális részstruktúrája Bizonyítás: 1. Ha z k x m, akkor az x m = y n elemet hozzátehetnénk Z-hez, és így X és Y egy k + 1 hosszú közös részsorozatát kapnánk, ez ellentmond Z választásának. Ezért z k = x m = y n. Most a Z k 1 prefix hossza k 1 és közös részsorozata X m 1 -nek és Y n 1 -nek. Meg kell mutatni, hogy ezek egy LKR-je is. Ha W egy legalább k hosszú közös részsorozata X m 1 -nek és Y n 1 -nek, akkor ehhez hozzáfűzve az x m = y n elemet, X és Y k-nál hosszabb közös részsorozatát kapjuk, ami ellentmond Z választásának. 2. Ha z k x m, akkor Z közös részsorozata X m 1 -nek és Y -nak. Ha ezeknek volna egy W közös részsorozata, mely hosszabb, mint k, akkor ez közös részsorozata volna X m -nek és Y -nak, ami ismét ellentmond Z választásának. 3. A bizonyítás hasonlóan történik, mint 2-nél.

PM-07 p. 9/13 2. lépés: részfeladatok rekurzív megoldása A tétel azt mondja, hogy csak egy vagy kettő részfeladat van, amit meg kell vizsgálni X = (x 1, x 2,..., x m ) és Y = (y 1, y 2,..., y n ) LKR-jének megkeresésekor. Ha xm = y n, akkor X m 1 és Y n 1 LKR-jét kell megkeresni, amelyhez csatolva az x m = y n elemet kapjuk X és Y LKR-jét. Ha xm y n, akkor két részfeladatot kell megoldanunk: X m 1 és Y, illetve X és Y n 1 LKR-jét kell megkeresni. Akármelyik is a hosszabb, az az X és Y LKR-je. Mivel ezek az esetek kimerítik az összes lehetőséget, tudjuk, hogy egy részfeladat megoldása benne van X és Y LKR-jében. Látható, hogy az LKR problémában a részfeladatok átfedők. X és Y LKR-jének megkeresésekor szükségünk lehet X és Yn 1, illetve X m 1 és Y LKR-jének megkeresésére. Ezek közös részfeladata Xm 1 és Y n 1 LKR-jének meghatározása.

PM-07 p. 10/13 Rekurzív összefüggés Meghatározható egy rekurzív összefüggés: Legyen c[i,j] X i és Y i LKR-jének hossza. Ha akár i, akár j nulla, azaz a sorozatok legalább egyikének hossza 0, akkor természetesen az LKR hossza is 0. Az LKR optimális részstruktúra tulajdonságából a következő rekurzív képletet kapjuk: c[i, j] = 0, ha i = 0 vagyj = 0, c[i 1,j 1] + 1, ha i,j > 0 és x i = y j max(c[i,j 1],c[i 1,j]), ha i,j > 0 és x i y j

PM-07 p. 11/13 3. lépés: LKR hosszának kiszámítása Használhatjuk a dinamikus programozást. LKR-hossza(X, Y ) 1. m := hossz[x] 2. n := hossz[y ] 3. for i := 1 to m do c[i,0] := 0 4. for j := 1 to m do c[0, j] := 0 5. for i := 1 to m 6. do for j := 1 to n 7. do if x i = y j 8. then c[i, j] := c[i 1, j 1] + 1 9. b[i, j] := 10. else if c[i 1, j] c[i, j 1] 11. then c[i, j] := c[i 1, j] b[i, j] := 12. else c[i, j] := c[i, j 1] b[i, j] := 13. return c és b Az eljárás futási ideje O(m n), mivel minden tömbelem kiszámításának ideje O(1).

Eredmény mátrix PM-07 p. 12/13

PM-07 p. 13/13 4.lépés: Egy LKR megszerkesztése Az alábbi eljárás X és Y LKR-jének elemeit a helyes, eredeti sorrendben nyomtatja ki. LKR-nyomtat(b, X, i, j) 1. if i = 0 vagy j = 0 2. then return 3. if b[i,j] = 4. then LKR-nyomtat(b,X,i 1,j 1) 5. print x i 6. else if b[i,j] = 7. then LKR-nyomtat(b,X,i 1,j) 8. else LKR-nyomtat(b,X,i,j 1)