Mintailleszts KnuthMorrisPratt KMP algoritmus CSKA BOGLRKA Algoritmusok s
Mintaillesztés Knuth-Morris-Pratt (KMP) algoritmus CSÓKA BOGLÁRKA Algoritmusok és bonyolultságuk 2019. 04. 12.
Miről lesz szó? Bevezetés Elmélet - mintaillesztés majd KMP Konkrét példa Futási idő elemzése Gyakorlati alkalmazás Összefoglalás 2
Bevezetés 3 Lényege: egy minta összes előfordulását keresi a szövegben Jelentősége: első lineáris idejű „string matching” algoritmus (1970) Ötlet: ha nem egyezik meghatározza, hogy hol kezdődhet a következő illeszkedés (szóból nyert információval), így elkerülhető a korábban megvizsgált karakterek újra egyeztetése
Elmélet – mintaillesztés I. Jelölések: § szöveg: n hosszúságú T[n] tömb § minta: m hosszúságú P[m] tömb (ahol m ≤ n) § Ezen tömbök elemei: ∑ véges ábécé jelei (pl. {0, 1} vagy {a, b, …. , z}) Azt mondjuk, hogy a P minta előfordul s eltolással a T szövegben (vagy másképpen fogalmazva a P minta a T szöveg (s + 1)-edik pozíciójára illeszkedik), ha 0 ≤ s ≤ n − m és T[s+1. . s+m] = P[1. . m] (azaz: ∀ j ∈ [1. . m] : T[s + j] = P[j]) 4
Elmélet - mintaillesztés II. Konkatenáció: Az x és y sorozatok konkatenációja egy olyan sorozat, amelyben x jeleit y jelei követik, és a hossza |x| + |y|. Jele xy. Prefix: A w sorozat az x sorozat prefixe, ha x = wy. Szuffix: A w sorozat az x sorozat szuffixe, ha x = yw. 5 Példa: X = abcca W 1 = ab, Y 1= cca W 2 =cca, Y 2= ab „ab” prefixe az „abcca”-nak „cca” szuffixe az „abcca”-nak
Elmélet – KMP 6 Előfeldolgozás π [1. . m] segédfüggvényt határozzuk meg a minta alapján (Futásidő: Θ(m)). Megadja, hogyan illeszkedik a minta önmaga eltoltjaira. Leghosszabb prefixet nézünk ami szuffix is. Illesztés Mintapélda: táblán
7 Pszeudokódok
8
Futásidő I. Amortizáló elemzés segítségével (potenciál módszer): A Φ potenciál függvény minden Di adatszerkezethez egy valós Φ(Di) számot rendel, ami a Di adatszerkezethez rendelt potenciál. c*i = ci + Φ(Di) − Φ(Di− 1) Művelet amortizációs költsége = tényleges költség + a művelet által okozott potenciálváltozás n n művelet: ∑ c*i felső becslés i=1 9
Futásidő II. 10 Prefix függvény: k potenciált rendelünk az algoritmus aktuális k értékéhez (nem lehet negatív) 3. sor: kezdeti értéke k=0 6. sor: while ciklus ha belemegy: csökkenti, mert π[k] < k ciklusmag egyes végrehajtásait kiegyenlíthetjük a potenciál függvény csökkentésével 8. sor: if ha belemegy: növeli 1 -gyel 5 -9. sorokból álló ciklusmag amortizált költsége O(1) értékének
Futásidő III. A külső ciklus m-szer fut le, így a futási ideje: Θ(m) Hasonlóan megmutatható az Illesztő függvényre, hogy futási ideje: Θ(n). Így összegezve Θ(m+n) idő alatt futó lineáris algoritmus 11
Gyakorlati alkalmazás Legtöbb szókeresési szituációban ez használatos, mivel gyorsabb és kevesebb memóriát használ, mint a többi algoritmus Hosszú szövegek, melyek kevés féle karakterből állnak (pl. DNS- láncokban minta keresése) Kód, videó (lásd: források) 12
Összefoglalás Célja: a szövegben szereplő összes megtalálása, helyeiknek visszaadása Lineáris 13 minta futási idejű, leghatékonyabb algoritmus Alapötlete: prefix függvényből információt nyerünk, melynek segítségével megoldható, hogy nem kell mindig visszalépni a szövegben a minta kezdetére
Források Új algoritmusok (Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein) http: //www. informatom. hu/sze/01/LGB_SZ 001/Cormen-Lieserson-Rivest. Stein. -. Uj. algoritmusok. pdf ELTE Algoritmusok és adatszerkezetek honlap: http: //tamop 412. elte. hu/tananyagok/algoritmusok/lecke 33_lap 1. html Videó: https: //www. youtube. com/watch? v=2 ogq. PWJSft. E Kód: https: //www. geeksforgeeks. org/kmp-algorithm-for-pattern-searching/ 14
15 Köszönöm szépen a figyelmet!
- Slides: 15