Gubicza József (GUJQAAI.ELTE)

Slides:



Advertisements
Hasonló előadás
Informatika I. 3. Logikai függvények.
Advertisements

Koordináták, függvények
Programozási tételek, és „négyzetes” rendezések
Kódelmélet.
Húrnégyszögek Ptolemaiosz tétele
3. Folytonos wavelet transzformáció (CWT)
Tóth István Algoritmusok és adatszerkezetek 2.
Algoritmusok és adatszerkezetek 2 Újvári Zsuzsanna.
Visual Basic for Application (VBA)
Dijkstra algoritmus Baranyás Bence. Feladat Adott egy G=(V,E) élsúlyozott, irányított vagy irányítás nélküli, negatív élsúlyokat nem tartalmazó, véges.
Programozási alapismeretek 4. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 4.2/  A szöveg A szöveg.
Sztringek.
Sztringek  Az fscanf() és a fprintf() függvényeknél a %s-es formátumtagot kell használni.  A %s formátumtag az első white space karakterig folytatja,
Bevezetés a Java programozásba
Függvénytranszformációk
Mátrix függvények Keresőfüggvények
Programozás I. Horváth Ernő 1. Elérhetőségek Bauer Péter Horváth Ernő Tanszéki honlap
OPERÁCIÓKUTATÁS Kalmár János, 2012 Tartalom A nulla-egy LP megoldása Hátizsák feladat.
Közös katalógusok melléklet a Bevezetés a pedagógiai tájékozódásba című ELTE jegyzethez.
A digitális számítás elmélete
Leszámoló rendezés Készítette: Várkonyi Tibor Zoltán VATNABI.ELTE
„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.
A Q-learning módszer alkalmazása NXT robotok irányítására.
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..
Microsoft Excel Függvények II.
hogy mitől zakatol a vonat?
A számítógép működése TAKÁCS BÉLA
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.
Betűk rendezésétől egy valós számokat tartalmazó vektor rendezéséig Kiss László főiskolai docens OE RKK MKI augusztus 25.
Karakterláncok Páll Boglárka.
Karakterláncok Páll Boglárka. Karakterláncok Karakterlánc olyan karakterek sorozata amelyek az ASCII táblázatban találhatók. Maximális hossza rögzített,
Átalakítás előltesztelő ciklusból hátultesztelő ciklusba és fordítva.
Vektorok © Vidra Gábor,
Knuth-Morris-Pratt algoritmus
Speciális Listák: Sor A sor adatszerkezet olyan speciális lista, amelyet a műveletei definiálnak. 1. ACCESS HEAD 3. POP itt GET-nek nevezzük 5. INJECT.
ismétlődő (azonos vagy hasonló) tevékenységek megvalósítására szolgál
Rendezések és szövegkezelő függvények
Szintaktikai, szemantikai szabályok
Programozás4 Készítette: Rummel Szabolcs
Brute Force algoritmus
A Budyko-modell és egyes hazai tapasztalatai
Informatika I. 4. Szöveg és dátumfüggvények.
RADIX bináris számokra ___A___ Szembe 2 mutatóval, ha a felsőnél 1-es, az alsónál 0, akkor csere.
Dijkstra algoritmusa Gubicza József (GUJQAAI.ELTE)
Prim algoritmusa Gubicza József (GUJQAAI.ELTE). Jellemzők Cél: Adott egyszerű gráfban a min. költségű feszítőfa meghatározása. Algoritmikus szinten: 3.
Az ábrán az inicializáló blokk lefutása utáni állapotot láthatjuk. A KÉSZ halmazhoz való tartozást színezéssel valósítjuk meg. A nem KÉSZ csúcsok fehérek,
DAG topologikus rendezése
Bekezdések formázása 1..
Többdimenziós valószínűségi eloszlások
Függvények.
C Programozási alapok.
Algoritmusok és Adatszerkezetek Egy kifejezés lengyelformára hozása - bemutató.
Computing n-Gram Statistics in MapReduce Klaus Berberich, Srikanta Bedathur EDBT/ICDT 2013 Joint Conference.
Gazdasági informatikus - Szövegszerkesztés 1 Bekezdések formázása 2.
Készítette: Mátyás István agrár mérnöktanár szakos hallgató,
1.  Szerzői:  Panagiotis Bouros (University of Hong Kong),  Shen Ge (University of Hong Kong),  Nikos Mamoulis (University of Hong Kong)  Esemény:
Szállításszervezés.
Statisztikai és logikai függvények
KNUTH-MORRIS-PRATT ALGORITMUS (KMP) KÉSZÍTETTE: ZELNIK MÁRTON.
Quick-Search algoritmus. Bevezet ő Az eljárás működése során két esetet különböztetünk meg: A szöveg minta utáni első karaktere nem fordul elő a mintában.
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.
ZRINYI ILONA matematikaverseny
Készítette: Horváth Zoltán
Algoritmusok és Adatszerkezetek I.
Mintaillesztés Knuth-Morris-Pratt (KMP) algoritmus
Algoritmusok és Adatszerkezetek I.
INFOÉRA 2006 Szövegfeldolgozás III.
Szövegfeldolgozás II. INFOÉRA perc kell még hozzá
Előadás másolata:

Gubicza József (GUJQAAI.ELTE) KMP (mintaillesztés) Gubicza József (GUJQAAI.ELTE)

Az algoritmus B C B C B C D B C B C D B C B C D Hasonlóan működik mint a Brute Force algoritmus, ám kihasználja a mintában levő prefix-suffix kapcsolatokat (ha vannak), így ha egy szöveg vizsgálata elromlik bizonyos karakternél, nem feltétlen kell a vizsgálatot a minta elejétől újrakezdeni. Csak a megfelelő prefixel kell odébb tolni a mintát, az „elromlott” karakterhez. Példa: B C B C B C D Szöveg: B C B C D Minta: B C B C D

Az algoritmus Viszont ahhoz, hogy tudjuk a mintával való ugrás lehetséges értékeit, definiálnunk kell egy next függvényt, amely megadja a minta egyes kezdőszeleteire a leghosszabb egymással egyező prefix-szuffix párok hosszát. Ezt a gyakorlatban egy vektorral lehet megvalósítani, amit az initnext(M[1..m],next[1..m-1]) eljárásban töltünk fel. (M a minta, m hosszúsággal)

Az initnext eljárás Az initnext gyakorlatilag a minta elcsúsztatott keresését hajtja végre önmagán (KMP algoritmussal) , és közben eltárolja a legnagyobb illeszkedő részek hosszát.

Initnext A B B A B C A B B A B C M[1] != M[2] A B B A B C Mi a leghosszabb prefix, a mintában a második karakterig tekintve? Mivel a prefix legalább 1 hosszú kell legyen, így az a kérdés, hogy M[1] = M[2] ?

Initnext Next[1] = 0 A B B A B C Next[2] = 0 M[1] != M[2] Next[3] = 0 Next[3] = ? M[1] != M[3] Mi a leghosszabb prefix az első 3 karakterig tekintve? Mivel M[1] != M[2] => M[1..2] != M[2..3] Így 2 hosszú prefix nincs. Így az maradt a kérdés, hogy van-e egy hosszú prefixünk? Mivel tudjuk, hogy M[1] != M[2], így eltolva az alsó mintát a harmadik karakter alá, láthatjuk, hogy M[1] != M[3]. Így..

Initnext A B B A B C A B B A B C M[1] != M[2] A B B A B C Next[3] = 0 M[1] != M[3] Next[4] = ? Next[4] = 1 M[1] = M[4] Mi a leghosszabb prefix az első 4 karakterig? [Felhasználva a táblázatban levő egyenlőtlenségeket.] (3 hosszú prefix?) M[1]!=M[2] => M[1..3] != M[2..4] (2 hosszú prefix?) M[1]!=M[3] => M[1..2] != M[3..4] 1 hosszú prefix vizsgálatánál, már M[1]-et nem kell M[2] és M[3]-al összehasonlítani Így…

Initnext A B B A B C A B B A B C M[1] != M[2] A B B A B C Next[3] = 0 M[1] != M[3] Next[4] = 1 M[1] = M[4] Mi a leghosszabb prefix az első 5 karakterig? [Felhasználva a táblázatban levő egyenlőtlenségeket.] (4 hosszú prefix?) M[1]!=M[2] => M[1..4] != M[2..5] (3 hosszú prefix?) M[1]!=M[3] => M[1..3] != M[3..5] 2 hosszú prefix? Next[5] = 2 Next[5] = ?

Folytatás Ezzel elkészült a next vektorunk! Értékeit felhasználva, mostmár elkezdhetünk az algoritmuson is dolgozni. S lesz a szöveg (hossza n), M a minta (hossza m), i és j az algoritmusban szereplő indexek, valamint szem előtt tartjuk az előbb kapott next értékeit.

A KMP algoritmus

D A B B A B A B B A B C A B B A B C Ezen a ponton, j := next[5], S: D A B B A B A B B A B C (->n = 12) M: A B B A B C (->m = 6) Next[1..3] = 0 Next[4] = 1 Next[5] = 2 I J 0 0 1 0 D A B B A B A B B A B C 2 1 3 2 A B B A B C 4 3 5 4 6 5 A vizsgált értékek: i+1 és j+1 Tehát most megnézzük, hogy S szöveg első karaktere megegyezik e, M minta első karakterével Most pedig azt nézzük, hogy a szöveg második karaktere, megegyezik-e a minta első karakterével (csúsztatunk). 6 2 Ezen a ponton, j := next[5], j értéke így 2 lesz!

D A B B A B A B B A B C A B B A B C A B B A B C A B B A B C I J S: D A B B A B A B B A B C (->n = 12) M: A B B A B C (->m = 6) Next[1..3] = 0 Next[4] = 1 Next[5] = 2 0 0 1 0 2 1 D A B B A B A B B A B C 3 2 4 3 A B B A B C 5 4 6 5 A B B A B C 6 2 6 0 A B B A B C 7 1 8 2 Ha j = m, legyen k := i – (m-1) = 12 – 5 = 7 u := igaz Tehát találtunk (ezt u jelzi) a mintára illeszkedő szövegrészt, mégpedig a 7. pozíciótól 9 3 10 4 Ezen a ponton, j := next[2], j értéke így 0 lesz! 11 5 12 6