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



Hasonló dokumentumok
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

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

Fibonacci számok. Dinamikus programozással

Mesterséges intelligencia 1 előadások

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

Algoritmusok bonyolultsága

Országzászlók (2015. május 27., Sz14)

Matematikai és matematikai statisztikai alapismeretek

Gyakorló feladatok ZH-ra

Programozási módszertan. Mohó algoritmusok

GAZDASÁGI STATISZTIKA

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

Fordítóprogramok felépítése, az egyes programok feladata. A következő jelölésmódot használjuk: program(bemenet)(kimenet)

Véletlenített algoritmusok. 4. előadás

Egyszerű programozási tételek

Differenciaegyenletek

Mesterséges Intelligencia I. (I602, IB602)

Alkalmazott modul: Programozás

2015, Diszkrét matematika

Hálózati protokoll tervezése

II. Szabályalapú következtetés

117. AA Megoldó Alfréd AA 117.

Knuth-Morris-Pratt algoritmus

Operációs rendszerek 2 3. alkalom - Reguláris kifejezések, grep, sed. Windisch Gergely windisch.gergely@nik.uni-obuda.hu

C# feladatok gyűjteménye

Dualitás Dualitási tételek Általános LP feladat Komplementáris lazaság 2015/ Szegedi Tudományegyetem Informatikai Tanszékcsoport





Analízis 1. (BSc) vizsgakérdések Programtervez informatikus szak tanév 2. félév

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

Információs Technológia

I. rész 1. Egy gyümölcsjoghurt árát egy akció során 20%-kal csökkentették, így 100 Ft-ért adták. Mi volt a joghurt eredeti ára?

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

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

1. Számoljuk meg egy számokat tartalmazó mátrixban a nulla elemeket!

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

Más viszonylatban (például Badacsonyból Füredre, vagy Tapolcáról közvetlenül Fonyódra, stb.) a szállítás értelmetlen, ezért nem lehetséges.

148 feladat ) + ( > ) ( ) =?

3. Gyakorlat Ismerkedés a Java nyelvvel

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

REKURZIÓ. Rekurzív: önmagát ismétlő valami (tevékenység, adatszerkezet stb.) Rekurzív függvény: függvény, amely meghívja saját magát.

100% BIO Natur/Bio kozmetikumok és testápolás

Operációkutatás vizsga

angolul: greedy algorithms, románul: algoritmi greedy

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

10. fejezet Az adatkapcsolati réteg

Félévi időbeosztás (nagyjából) házi feladat beadási határidőkkel (pontosan) Valószínűségszámítás 2. matematikusoknak és fizikusoknak, 2009 tavasz

8. Laboratóriumi gyakorlat: Bevezetés a reguláris kifejezések használatába

0.1. Mi az a standard be- és kimenet? A két mintafeladat leírása

Számítógép Architektúrák

FORDÍTÓPROGRAMOK. MKSA3144F kidolgozott tételek ás verzió január 21., Domján Tamás

Beadható feladatok december Add meg az alábbi probléma állapottér-reprezentációját!

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

PROGRAMOZÁS MÓDSZERTANI ALAPJAI I. TÉTELEK ÉS DEFINÍCIÓK

3. Strukturált programok

XML adatkezelés. 11. témakör. Az XQuery nyelv alapjai. XQuery. XQuery célja egy imperatív lekérdező nyelv biztosítása. XQuery.

Bináris keres fák kiegyensúlyozásai. Egyed Boglárka

Halmazok. Halmazelméleti lapfogalmak, hatványhalmaz, halmazm veletek, halmazm veletek azonosságai.

Osztályozóvizsga követelményei

MATEMATIKA ÍRÁSBELI VIZSGA EMELT SZINT% ÉRETTSÉGI VIZSGA október október 15. 8:00 MINISZTÉRIUMA EMBERI ERFORRÁSOK

C programnyelv 1. Kedves Kollegina, Kolléga!

Információ Európa országairól (összetett alkalmazás)

Szimulációk egyszerősített fehérjemodellekkel. Szilágyi András

1. A korrelációs együttható

MATEMATIKA ÉVFOLYAM

Programozás I gyakorlat. 5. Struktúrák

Kriptográfiai algoritmus implementációk időalapú támadása Endrődi Csilla, Csorba Kristóf BME MIT

A digitális számítás elmélete

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

Algoritmuselmélet. Király Zoltán ELTE Matematikai Intézet február 18. Legfrissebb, on-line verzió:

4. Fejezet : Az egész számok (integer) ábrázolása

XIII. Bolyai Konferencia Bodnár József Eötvös József Collegium, ELTE TTK, III. matematikus. A véletlen nyomában

1. Bevezetés. A számítógéptudomány ezt a problémát a feladat elvégzéséhez szükséges erőforrások (idő, tár, program,... ) mennyiségével méri.

A KÉSZPÉNZÁTUTALÁSI MEGBÍZÁS NYOMTATVÁNY MŰSZAKI LEÍRÁSA, ALKALMAZÁSA, FORGALMAZÁSI FELTÉTELEI ÉS BEVIZSGÁLÁSA

Bevezetés a C++ programozási nyelvbe

Informatikus informatikus Térinformatikus Informatikus T 1/9

Információelmélet Szemináriumi gyakorlatok

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Klasszikus alkalmazások

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

Az indukció. Azáltal, hogy ezt az összefüggést felírtuk, ezúttal nem bizonyítottuk, ez csak sejtés!

A sed folyamszerkesztő

Erdélyi Magyar TudományEgyetem (EMTE

Bevezető Mi a statisztika? Mérés Feldolgozás Adatok rendezése Adatok jellemzése Időbeli elemzés Feladatok. Statisztika I.

Gráfokkal megoldható hétköznapi problémák

MATEMATIKA PRÓBAÉRETTSÉGI MEGOLDÓKULCS EMELT SZINT

Tartalom Regisztráció menete Első teendők Profilom

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

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

Programozás alapjai 1. (BMEVIEEA100)

Feladatok és megoldások a 4. hétre

LEKÉRDEZÉSEK SQL-BEN. A relációs algebra A SELECT utasítás Összesítés és csoportosítás Speciális feltételek

Naprakész jogszabály a CompLex Kiadó jogi adatbázisából. A jel a legutoljára megváltozott bekezdést jelöli. 54/2001. (XII. 27.

Dr. Jelasity Márk. Mesterséges Intelligencia I. Előadás Jegyzet (2008. október 6) Készítette: Filkus Dominik Martin

Adatok szűrése, rendezése


ábra 1 LabelPOINT 250 elektromos feliratozógép Címkekimeneti nyílás Vágóél LCD kijelző Bekapcsológomb

Átírás:

PM-04 p. 1/18 Programozási módszertan Dinamikus programozás: Nyomtatási feladat 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-04 p. 2/18 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-04 p. 3/18 Nyomtatási feladat Feladat az s 1,s 2,...,s n szavakból álló bekezdés kinyomtatása. A szavak rendre l 1,l 2,...,l n karakterekből állnak. A nyomtató egy sorba összesen M karaktert tud elhelyezni. Tegyük fel, hogy l i M 1 i n esetén. Ha egy sor az s i -től s j -ig terjedő szavakat tartalmazza, akkor a szavak között mindig egy szóköz van, míg a sor végén további M j + i j m=i l m extra szóköz (nem negatív!). Adjunk meg egy hatékony algoritmust, amely a "legszebben" nyomtatja ki a bekezdést, azaz minimalizálja az utolsó sor kivételével a sorok végén található extra szóközök számának köbeinek összegét!

PM-04 p. 4/18 Megoldás dinamikus programozással 1 i j n esetén legyen e[i,j] = M j + i j m=i l m (az s i -től s j -ig terjedő szavakat tartalmazó sor végén lévő extra szóközök száma) 1 i j n esetén legyen k[i, j] =, ha e[i,j] < 0, 0, ha j = n és e[i,j] 0, e[i,j] 3, különben

PM-04 p. 5/18 Megoldás dinamikus programozással Tekintsük az s 1,s 2,...,s j szavak egy optimális elrendezését. Tegyük fel, hogy ebben az utolsó sor az s i szóval kezdődik. Vegyük észre, hogy ekkor az utolsó előtti sorig terjedő rész az s 1,s 2,...,s i 1 szavak egy optimális elrendezése. Ha nem így lenne, akkor ezt a részt lecserélve az s 1,s 2,...,s i 1 szavak egy optimális elrendezésére az s 1,s 2,...,s j szavak egy "szebb" elrendezéséhez jutnánk, ami ellentmondás. Jelölje c[j] az s 1,s 2,...,s j szavak optimális elrendezésének soraihoz rendelt k értékek összegét. c[j] = { 0, ha j = 0, min{c[i 1] + k[i,j] 1 i j}, ha j > 0. 1 i j estén legyen p[j] annak az s i szónak az indexe, amellyel az utolsó sor kezdődik az s 1,s 2,...,s j szavak optimális elrendezésénél.

PM-04 p. 6/18 Program 1. Nyomtatás(l,n,M) 2. for i = 1 to n do 3. e[i, i] = M l[i] 4. for j = i + 1 to n do 5. e[i, j] = e[i, j 1] l[j] 1 6. for i = 1 to n do 7. for j = i to n do 8. if e[i, j] < 0 9. then k[i, j] = 10. else 11. if j = n and e[i, j] 0 12. then k[i, j] = 0 13. else k[i, j] = e[i, j] 3 14. c[0] = 0 15. for j = 1 to n do 16. c[j] = 17. for i = 1 to j do 18. if c[i 1] + k[i, j] < c[j] then 19. c[j] = c[i 1] + k[i, j]; p[j] = i 21. return c, p

PM-04 p. 7/18 Tördelés 1. Tördelés(p,j) 2. i = p[j] 3. if i = 1 4. then h = 1 5. else h = Trdels(p,i 1) + 1 6. print (h,i,j) 7. return h Az eljárás az optimálisan tördelt bekezdés sorainak számával tér vissza. A kinyomtatott (h,i,j) hármasok azt mutatják, hogy a h-adik sor az s i -től s j -ig terjedő szavakat tartalmazza (h = 1,2,...). A Nyomtatás eljárás költsége O(n 2 ), a Tördelés eljárás költsége O(n).

PM-04 p. 8/18 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-04 p. 9/18 Ö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-04 p. 10/18 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-04 p. 11/18 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-04 p. 12/18 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-04 p. 13/18 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-04 p. 14/18 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-04 p. 15/18 Rekurzív összefüggés Meghatározható egy rekurzív összefüggés: Legyen c[i,j] X i és Y j 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-04 p. 16/18 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 n 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-04 p. 17/18

PM-04 p. 18/18 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)