KNUTHMORRISPRATT ALGORITMUS KMP KSZTETTE ZELNIK MRTON KNUTHMORRISPRATT ALGORITMUS

  • Slides: 33
Download presentation
KNUTH-MORRIS-PRATT ALGORITMUS (KMP) KÉSZÍTETTE: ZELNIK MÁRTON

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) KÉSZÍTETTE: ZELNIK MÁRTON

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) TÖMÖREN Adott egy szöveg, és egy keresendő minta (szó). A feladat

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) TÖMÖREN Adott egy szöveg, és egy keresendő minta (szó). A feladat az, hogy megkeressük a szövegben a minta első előfordulását. A KMP lényege, hogy nem kell betűnként a szövegre illesztenünk a szót, hanem nagyobb lépésekkel haladhatunk. Ahova már láthatóan nem fog illeszkedni, ott nem is próbálkozunk

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) RÉSZLETESEN Ez az algoritmus egy lineáris idejű mintaillesztő algoritmus. Az algoritmus

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) RÉSZLETESEN Ez az algoritmus egy lineáris idejű mintaillesztő algoritmus. Az algoritmus kiküszöböli a δ átmeneti függvény kiszámítását és az illesztési ideje Θ(n). Egy π[1. . m] segédfüggvényt használunk, amelyet előzetesen számítunk ki a minta alapján Θ(m) idő alatt. A π tömb segítségével a δ átmeneti függvény értékei „menet közben” hatékonyan számolhatók. Ez azt jelenti, hogy bármely q=0, 1, …, m állapotra és aєΣ jelre, π(q) érték adja meg δ(q, a) számítási módját és ez független a-tól. A π tömbnek csak m eleme van, míg δ-nak σ(m|Σ|), így az előfeldolgozás során megspóroljuk a |Σ| tényezőt, ha π-t határozzuk meg δ helyett. Alapötlet: a léptetés mértéke előre kiszámítható a mintára, továbbá a léptetés után az összehasonlítást nem kell a minta elejéről kezdeni.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ÉRDEKESSÉG Hasonlóan működik mint a Brute Force algoritmus, ám kihasználja a

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ÉRDEKESSÉG 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ő prefixszel kell odébb tolni a mintát, az „elromlott” karakterhez. 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)

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ALGORITMUS Initnext(M[1. . m], next[1. . m-1]) i, j : =

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ALGORITMUS Initnext(M[1. . m], next[1. . m-1]) i, j : = 0, 0 i<n ⋀ j<m S[i+1] = M[j+1] i, j : = i+1, j+1 j=0 i : = i+1 j : = next[j] j=m k, u : = i+m, ↑ u : = ↓ next(j) = max{ h∊[ 0. . j-1 ]: M[ 1. . h ] = M[ j-h+1. . j ] }

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY ‚ABCABC’-ig jó, onnantól nem illeszkedik.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY ‚ABCABC’-ig jó, onnantól nem illeszkedik.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY ‚ABCABC’-ig jó, onnantól nem illeszkedik. A

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY ‚ABCABC’-ig jó, onnantól nem illeszkedik. A lehető legkisebb ugrással, a lehető legnagyobb azonos résszel kell tovább illesztenünk a mintát.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: ABCABCABCYXYZ… Minta: ►► ABCABCY ‚ABCABC’-ig jó, onnantól nem illeszkedik.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: ABCABCABCYXYZ… Minta: ►► ABCABCY ‚ABCABC’-ig jó, onnantól nem illeszkedik. A lehető legkisebb ugrással, a lehető legnagyobb azonos résszel kell tovább illesztenünk a mintát. A következő illesztéshez a 2. ‚A’ betűre toljuk el.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY ‚ABCABC’-ig jó, onnantól nem illeszkedik. A

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY ‚ABCABC’-ig jó, onnantól nem illeszkedik. A lehető legkisebb ugrással, a lehető legnagyobb azonos résszel kell tovább illesztenünk a mintát. A következő illesztéshez a 2. ‚A’ betűre toljuk el.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY ‚ABCABC’-ig jó, onnantól nem illeszkedik. A

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY ‚ABCABC’-ig jó, onnantól nem illeszkedik. A lehető legkisebb ugrással, a lehető legnagyobb azonos résszel kell tovább illesztenünk a mintát. A következő illesztéshez a 2. ‚A’ betűre toljuk el.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY ‚ABCABC’-ig jó, onnantól nem illeszkedik. A

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) PÉLDA Szöveg: Minta: ABCABCABCYXYZ… ABCABCY ‚ABCABC’-ig jó, onnantól nem illeszkedik. A lehető legkisebb ugrással, a lehető legnagyobb azonos résszel kell tovább illesztenünk a mintát. A következő illesztéshez a 2. ‚A’ betűre toljuk el.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1. Szöveg: Minta: ABABAX… ABABAY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1. Szöveg: Minta: ABABAX… ABABAY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1. Szöveg: Minta: ABABAX… ABABAY Az illeszkedő részen belül

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1. Szöveg: Minta: ABABAX… ABABAY Az illeszkedő részen belül a maximális egyező prefix-szuffix pár

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1. Szöveg: Minta: ABABAX… ABABAY Az illeszkedő részen belül

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1. Szöveg: Minta: ABABAX… ABABAY Az illeszkedő részen belül a maximális egyező prefix-szuffix pár p

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1. Szöveg: Minta: ABABAX… ABABAY Az illeszkedő részen belül

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1. Szöveg: Minta: ABABAX… ABABAY Az illeszkedő részen belül a maximális egyező prefix-szuffix pár p és s.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1. Szöveg: Minta: ABABAX… ABABAY Az illeszkedő részen belül

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1. Szöveg: Minta: ABABAX… ABABAY Az illeszkedő részen belül a maximális egyező prefix-szuffix pár p és s. Ha |p|=|s|>0 => p-t s-re toljuk.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1. Szöveg: Minta: ABABAX… ► ABABAY Az illeszkedő részen

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1. Szöveg: Minta: ABABAX… ► ABABAY Az illeszkedő részen belül a maximális egyező prefix-szuffix pár p és s. Ha |p|=|s|>0 => p-t s-re toljuk.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1. Szöveg: Minta: ABABAX… ABABAY Az illeszkedő részen belül

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 1. Szöveg: Minta: ABABAX… ABABAY Az illeszkedő részen belül a maximális egyező prefix-szuffix pár p és s. Ha |p|=|s|>0 => p-t s-re toljuk.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 2.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 2.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 2. Szöveg: Minta: ABCX… ABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 2. Szöveg: Minta: ABCX… ABCY

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 2. Szöveg: Minta: ABCX… ABCY Az illeszkedő részen belül

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 2. Szöveg: Minta: ABCX… ABCY Az illeszkedő részen belül a maximális egyező prefix-szuffix pár p és s, de itt nincsenek ilyenek.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 2. Szöveg: Minta: ABCX… ABCY Az illeszkedő részen belül

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 2. Szöveg: Minta: ABCX… ABCY Az illeszkedő részen belül a maximális egyező prefix-szuffix pár p és s, de itt nincsenek ilyenek. Ha |p|=|s|=0 => teljes eltolást alkalmazunk.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 2. Szöveg: Minta: ABCX… ► ABCY Az illeszkedő részen

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 2. Szöveg: Minta: ABCX… ► ABCY Az illeszkedő részen belül a maximális egyező prefix-szuffix pár p és s, de itt nincsenek ilyenek. Ha |p|=|s|=0 => teljes eltolást alkalmazunk.

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 2. Szöveg: Minta: ABCX… ABCY Az illeszkedő részen belül

KNUTH-MORRIS-PRATT ALGORITMUS (KMP) ELTOLÁS PÉLDA 2. Szöveg: Minta: ABCX… ABCY Az illeszkedő részen belül a maximális egyező prefix-szuffix pár p és s, de itt nincsenek ilyenek. Ha |p|=|s|=0 => teljes eltolást alkalmazunk.