sztring kósa márk pánovics jános 8. eloadás˝ szathmáry lászló...

Post on 05-Oct-2020

4 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.1

8. eloadásSztringSztringkereso algoritmusok.

Adatszerkezetek és algoritmusok eloadás2020. április 14.

Kósa Márk, Pánovics János,Szathmáry László és Halász Gábor

Debreceni EgyetemInformatikai Kar

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.2

Általános tudnivalókAjánlott irodalom:I Thomas H. Cormen, Charles E. Leiserson, Ronald L.

Rivest, Clifford Stein:Új algoritmusok, Scolar Informatika, 2003.

I Donald E. Knuth: A számítógépprogramozás muvészete1. (Alapveto algoritmusok), Muszaki Könyvkiadó, 1994.

I Donald E. Knuth: A számítógépprogramozás muvészete3. (Keresés és rendezés), Muszaki Könyvkiadó, 1994.

I Seymour Lipschutz: Adatszerkezetek,Panem-McGraw-Hill, Budapest, 1993.

I Rónyai Lajos, Ivanyos Gábor, Szabó Réka: Algoritmusok,Typotex, Budapest, 2008.

Félév teljesítésének feltételei:I Gyakorlati aláírás

• 2 ZHI Írásbeli vizsga, aminek az értékelésébe ...

További részletek:I http://hallg.inf.unideb.hu/~halaszI http://it.inf.unideb.hu/~halaszI http://shrek.unideb.hu/~gjhalasz

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.3

A sztring adatszerkezetA sztring olyan szekvenciális lista, amelynek az elemei egy ábécészimbólumai. Ezeket a szimbólumokat karaktereknek nevezzük.

Sztringgel végezheto muveletek

I Létrehozás: explicit módon felsoroljuk a sztring összeskarakterét.

I Bovítés: bárhol bovítheto. Bovítéskor két részsztringet képzünk,majd konkatenáljuk azokat a beszúrandó sztringgel.

I Törlés: megvalósítható a fizikai törlés, melynek során kétrészsztringet képzünk (melyekben már nem szerepel a törlendorészsztring), majd konkatenáljuk azokat.

I Csere: cserélhetünk egy karaktert, de részsztring is cserélhetomásik részsztringre. Két részsztringet képzünk, majdkonkatenáljuk azokat az új értéket képviselo sztringgel(törlés+bovítés).

I Rendezés: nem értelmezett.

I Keresés: értelmezheto, kereshetünk egy karaktert vagy egyrészsztringet.

I Elérés: soros vagy közvetlen.

I Bejárás: értelmezheto.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.4

A sztring adatszerkezet folytonos reprezentációiFix hosszon:

a l m a b a r a c k k ö r t e . . .

Változó hosszon:

I hossz a sztring elott:

4 a l m a 6 b a r a c k 5 k ö r t e . . .

I információs táblázattal:

a l m a b a r a c k k ö r t e . . .s1 4s2 6s3 5

. . .

I végjellel:

a l m a 4 b a r a c k 4 k ö r t e 4 . . .

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.5

A sztring adatszerkezet szétszórt reprezentációja

A listaelemek tartalmazhatnak

I egy karaktert(rossz helykihasználás)

I vagy egy részsztringet.Ebben esetben a részsztringek eltéro hosszúságúaklehetnek, és valamelyik folytonos reprezentációvalábrázoljuk oket.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.6

Sztringkereso (mintailleszto) algoritmusok

Egy sztringben keresünk egy másik sztringet. Azt a sztringet,amelyikben keresünk, alapsztringnek, azt a sztringet pedig,amit keresünk, mintasztringnek nevezzük. A pszeudokódokbanaz alapsztringet A-val, a mintasztringet P-vel fogjuk jelölni.

Néhány sztringkereso algoritmus:

I mezítlábas (brute force) algoritmusI Knuth–Morris–Pratt-algoritmusI Boyer–Moore-algoritmusI Rabin–Karp-algoritmusI Shift-And (Dömölki Bálint-féle) és Shift-Or algoritmus

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.7

A mezítlábas (brute force) algoritmus

function MEZÍTLÁBAS_KERES(A, P)1: n← HOSSZ(A)2: m← HOSSZ(P)3: for i← 1 to n-m+1 do4: j← 05: while j < m és A[i + j] = P[1 + j] do6: j← j + 17: end while8: if j = m then9: return i

10: end if11: end for12: return 0end function

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.8

A Knuth–Morris–Pratt-algoritmus

Prefix, szuffix

Legyen Σ egy ábécé és x = x1 . . . xk (k ∈ N) egy k hosszúságúsztring Σ felett (x ∈ Σ∗)!Az x-nek az u ∈ Σ∗ részsztring egy prefixe, ha

u = x1 . . . xb,ahol 0 ≤ b ≤ k ,

azaz ha x u-val kezdodik. Az x-nek az u részsztring egyszuffixe, ha

u = xk−b+1 . . . xk ,ahol 0 ≤ b ≤ k ,

azaz ha x u-val végzodik.

Valódi prefix, valódi szuffix

Az x egy u prefixét vagy x egy u szuffixét valódi prefixnek vagyszuffixnek nevezzük, ha u 6= x , azaz ha b < k .

Ha k = 0, akkor x = ε, ill. ha b = 0, akkor u = ε (ε ≡ üres sztring).

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.9

Elméleti alapok

Border

Legyen Σ egy ábécé és x = x1 . . . xk (k ∈ N) egy k hosszúságúsztring Σ felett!Az x-nek az r részsztring egy bordere, ha

r = x1 . . . xb és r = xk−b+1 . . . xk ,ahol 0 ≤ b < k .

Az x bordere egy olyan részsztring, amely valódi prefixe ésvalódi szuffixe is x-nek. Ekkor a részsztring b hosszát a borderhosszának nevezzük. Ha b = 0, akkor r = ε (üres sztring).

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.10

Elméleti alapok

Példa

Legyen x = abacab.I Az x valódi prefixei:

ε,a,ab,aba,abac,abaca.

I Az x valódi szuffixei:

ε,b,ab, cab,acab,bacab.

I Az x borderei:ε,ab.

Az ε border hossza 0, az ab border hossza 2.

Megjegyzés

I Az ε üres sztring minden x ∈ Σ+ sztringnek bordere.I Az ε üres sztringnek nincs bordere.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.11

Elméleti alapok

Példa

1 2 3 4 5 6 7 8 9 . . .

a b c a b c a b d

a b c a b d

a b c a b d

Az 1,. . . ,5 pozíciókon lévo karakterek megegyeznek. A 6.pozíción a c és d karakterek eltérnek. A minta 3 pozícióvaltovább léptetheto, és az összehasonlítások folytathatók aminta 3. pozíciójától az alapsztring 6. karakterével.A léptetés mértékét a p egyezo prefixének a legszélesebbbordere határozza meg. Ebben a példában az egyezo prefixabcab, a hossza j = 5. Az o legszélesebb bordere ab, amelyb = 2 hosszúságú. A léptetés mértéke j − b = 5− 2 = 3.Ezt követoen is marad még két egyezo karakter, ezértfolytathatjuk az összehasonlításokat a minta 3. karakterétolkezdve.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.12

Elofeldolgozás

Az elofeldolgozási szakaszban a minta minden egyesprefixéhez meg kell határozni a legszélesebb border hosszát.Késobb a keresési szakaszban a léptetés mértéke az egyezoprefixeknek megfeleloen számítható.

Theorem

Legyen r és s egy x sztring bordere, ahol |r | < |s|. Ekkor r egybordere s-nek.

Bizonyítás.

r r r r

s ss

x

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.13

Elofeldolgozás

Megjegyzés

Ha s a legszélesebb bordere x-nek, akkor x következolegszélesebb r borderét megkapjuk s legszélesebbbordereként, és így tovább. . .

Definition

Legyen x ∈ Σ∗ a P minta sztring egy valódi prefixe és a ∈ Σegy karakter.Az x egy r bordere bovítheto a-val, ha ra egy bordere xa-nak.

a a

r r

x

j + 1

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.14

Elofeldolgozás

A KÖV tömb

Az elofeldolgozási szakaszban egy m + 1 elemu KÖV tömbötszámítunk ki. A tömb KÖV[i] eleme a mintasztring ihosszúságú prefixéhez tartozó legszélesebb border hossza(i = 0, . . . ,m). Mivel az i = 0 hosszúságú ε sztringnek nincsenbordere, ezért KÖV[0] = −1.

Köv[i] + 1 i+ 1

Feltéve, hogy a KÖV[0], . . . , KÖV[i] értékeket már ismerjük, aKÖV[i + 1] értékét kiszámíthatjuk, ha ellenorizzük, hogy ap1 . . . pi prefix valamelyik bordere bovítheto-e a pi+1karakterrel.Ez abban az esetben teheto meg, ha pKÖV[i]+1 = pi+1. Abordereket a KÖV[i], KÖV[KÖV[i ]], . . . értékek csökkenosorrendjében kell megvizsgálni (hogy a leghosszabb borderttaláljuk meg).

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.15

Az elofeldolgozó algoritmus

function KÖV_FELTÖLT(P)1: m← HOSSZ(P)2: i← 03: j← KÖV[0]← – 14: while i < m do5: if j = – 1 vagy P[i + 1] = P[j + 1] then6: i← i + 17: j← j + 18: KÖV[i]← j9: else

10: j← KÖV[j]11: end if12: end while13: return KÖVend function

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.16

Elofeldolgozás

Példa

A p = ababaa minta esetén a borderek szélességei akövetkezo értékeket veszik fel a KÖV tömbben:

i : 0 1 2 3 4 5 6

p[i] : a b a b a a

Köv[i] : −1 0 0 1 2 3 1

Láthatjuk például, hogy KÖV[5] = 3, mivel az 5 hosszúságúababa prefixnek van egy 3 hosszúságú bordere.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.17

Keresés

Megjegyzés

Elméletileg semmi akadálya annak, hogy az elozoelofeldolgozó algoritmust a pt sztringre alkalmazzuk a phelyett. Ha a bordereket csak a p minta m szélességéigszámoljuk ki, akkor a pt valamely x prefixének egy mszélességu bordere megfelel a minta egy elofordulásánakt-ben (feltéve, hogy a border nem önátfedo).

p t

x

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.18

A kereso algoritmusfunction KMP_KERESÉS(A, P)

1: n← HOSSZ(A)2: m← HOSSZ(P)3: KÖV← KÖV_FELTÖLT(P)4: i← j← 05: while i < n és j < m do6: if j = – 1 vagy A[i + 1] = P[j + 1] then7: i← i + 18: j← j + 19: else

10: j← KÖV[j]11: end if12: end while13: if j = m then14: return i – m + 115: else16: return 017: end ifend function

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.19

Keresés

A minta léptetése

t

i+ 1összehasonlítás

Köv[j] + 1 j + 1

Köv[j] + 1

léptetés

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.20

A Shift-And (Dömölki-féle) algoritmus

Az ötlet

Legyen a p mintasztring hossza m! Vegyünk egy m elemu Dvektort, amelynek j-edik eleme akkor és csak akkor 1, hap1 . . . pj szuffixe a1 . . . ai -nek, egyébként 0! (i-vel az alapsztringaktuálisan vizsgált karakterének az indexét jelöljük.)

Megjegyzés

Ha p mérete kisebb, mint egy gépi szó hossza, akkor ez avektor a számítógép egy regiszterében is tárolható, ígygyorsítható a majdani keresés.

Amikor az alapsztring következo, (i + 1)-edik karakterétolvassuk, meg kell határoznunk egy új D′ vektort.Ehhez a következo megfigyelést használjuk fel: a D′ vektor(j + 1)-edik elemének értéke akkor és csak akkor lesz 1, ha

1 D-nek a j-edik eleme 1 volt, azaz p1 . . . pj szuffixe volta1 . . . ai -nek, és

2 ai+1 megegyezik pj+1-gyel.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.21

A Shift-And (Dömölki-féle) algoritmus

A megvalósítás

Az algoritmus az elofeldolgozás során felépít egy B bitmátrixot,amelynek az oszlopait a p mintasztring karaktereivel (illetveezen karakterek indexeivel), a sorait pedig az ábécé(egymástól különbözo) karaktereivel címkézi. Egy ckarakterhez tartozó sorban

Bc,j =

{1, ha pj = c,0 egyébként.

A kereséshez az algoritmus három m elemu segédvektort (D,U és V ) használ, melyeket a következoképpen definiálunk:

Dj = 0 1 ≤ j ≤ m esetén,

Uj =

{1, ha j = 1,0 egyébként,

Vj =

{1, ha j = m,

0 egyébként.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.22

A Shift-And (Dömölki-féle) algoritmusA SHIFT muvelet

Legyen X = (x1, x2, . . . , xm−1, xm) !Jelölje SHIFT(X ) azt a vektort, melyre

SHIFT(X ) = SHIFT(x1, x2, . . . , xm−1, xm) = (0, x1, x2, . . . , xm−1)

Az a alapsztringet karakterenként vizsgáljuk végig, és mindenai karakter érintésekor frissítjük a D vektort a következoformula felhasználásával:

D = (SHIFT(D) ∨ U) ∧ Bai .

Ha a keresés során az i-edik karakter feldolgozása utánteljesül a

D ∧ V 6= 0m = (0,0, . . . ,0︸ ︷︷ ︸m

)

feltétel, akkor megtaláltuk a p mintasztring egy elofordulását aza alapsztringben. A minta elso karaktere ekkor az alapsztring(i −m + 1)-edik karakterére illeszkedik.

Feltéve, hogy a D kiszámításához szükséges muveletekkonstans idoben elvégezhetok, az algoritmus futási ideje: Θ(n).

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.23

A kereso algoritmus

function SHIFT_AND(A, P)

1: n← HOSSZ(A)

2: m← HOSSZ(P)

3: for all c ∈ Σ do

4: for j← 1 to m do

5: if P[j] = c then

6: Bc,j ← 1

7: else

8: Bc,j ← 0

9: end if

10: end for

11: end for

12: for j← 1 to m do13: Dj ← Uj ← Vj ← 014: end for15: U1 ← Vm ← 116: for i← 1 to n do17: D ←

(SHIFT(D) ∨ U) ∧ BA[i]

18: if D ∧ V 6= 0m then19: return i-m+120: end if21: end for22: return 0end function

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.24

A Shift-And (Dömölki-féle) algoritmus

Legyen a = atacgatatata és p = atat !A Shift-And algoritmus által használt B bitmátrix a következolesz:

a t a ta 1 0 1 0t 0 1 0 1∗ 0 0 0 0

A mátrixban ∗ jelzi az ábécé a-tól és t-tol különbözo összestöbbi karakterét.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.25

A Shift-And (Dömölki-féle) algoritmus

i ai D SH(D) SH(D) ∨ U Bai D′

1 a (0, 0, 0, 0) (0, 0, 0, 0) (1, 0, 0, 0) (1, 0, 1, 0) (1, 0, 0, 0)2 t (1, 0, 0, 0) (0, 1, 0, 0) (1, 1, 0, 0) (0, 1, 0, 1) (0, 1, 0, 0)3 a (0, 1, 0, 0) (0, 0, 1, 0) (1, 0, 1, 0) (1, 0, 1, 0) (1, 0, 1, 0)4 c (1, 0, 1, 0) (0, 1, 0, 1) (1, 1, 0, 1) (0, 0, 0, 0) (0, 0, 0, 0)5 g (0, 0, 0, 0) (0, 0, 0, 0) (1, 0, 0, 0) (0, 0, 0, 0) (0, 0, 0, 0)6 a (0, 0, 0, 0) (0, 0, 0, 0) (1, 0, 0, 0) (1, 0, 1, 0) (1, 0, 0, 0)7 t (1, 0, 0, 0) (0, 1, 0, 0) (1, 1, 0, 0) (0, 1, 0, 1) (0, 1, 0, 0)8 a (0, 1, 0, 0) (0, 0, 1, 0) (1, 0, 1, 0) (1, 0, 1, 0) (1, 0, 1, 0)

9 t (1, 0, 1, 0) (0, 1, 0, 1) (1, 1, 0, 1) (0, 1, 0, 1) (0, 1, 0, 1)

10 a (0, 1, 0, 1) (0, 0, 1, 0) (1, 0, 1, 0) (1, 0, 1, 0) (1, 0, 1, 0)

11 t (1, 0, 1, 0) (0, 1, 0, 1) (1, 1, 0, 1) (0, 1, 0, 1) (0, 1, 0, 1)

12 a (0, 1, 0, 1) (0, 0, 1, 0) (1, 0, 1, 0) (1, 0, 1, 0) (1, 0, 1, 0)

A táblázatból látható, hogy az algoritmus kétszer, a 9. és a 11. karakterfeldolgozása után állapíthatja meg, hogy D′ ∧ V 6= 0m. A mintasztring így a9− 4 + 1 = 6. és 11− 4 + 1 = 8. pozícióktól kezdve fordul elo azalapsztringben.

(Valójában itt egy másik algoritmusról esett szó. Miért?)

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.26

A Shift-And (Dömölki-féle) algoritmus

Az algoritmus hatalmas elonye, hogy párhuzamosan többmintát is kereshetünk a segítségével. Hogyan?

I A B bitmátrixnak annyi oszlopa lesz, ahány karakterbolállnak a mintasztringek összesen. Kitöltése ugyanúgytörténik, mint eddig.

I Az U bitvektor is annyi elemu lesz, ahány karakterbolállnak a mintasztringek összesen. A vektorban az egyesminták elso karakterének megfelelo pozíciókba 1-et írunk,a többibe 0-t.

I Az V bitvektor is annyi elemu lesz, ahány karakterbolállnak a mintasztringek összesen. A vektorban az egyesminták utolsó karakterének megfelelo pozíciókba 1-etírunk, a többibe 0-t.

I Maga az algoritmus alapvetoen nem változik. Ha aD ∧ V 6= 0m feltétel teljesül, akkor az(oka)t a mintá(ka)ttaláltuk meg, amely(ek)nek az utolsó karakteréhez tartozóbitpozícióban 1 szerepel a D ∧ V vektorban.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.26

A Shift-And (Dömölki-féle) algoritmus

Az algoritmus hatalmas elonye, hogy párhuzamosan többmintát is kereshetünk a segítségével. Hogyan?

I A B bitmátrixnak annyi oszlopa lesz, ahány karakterbolállnak a mintasztringek összesen. Kitöltése ugyanúgytörténik, mint eddig.

I Az U bitvektor is annyi elemu lesz, ahány karakterbolállnak a mintasztringek összesen. A vektorban az egyesminták elso karakterének megfelelo pozíciókba 1-et írunk,a többibe 0-t.

I Az V bitvektor is annyi elemu lesz, ahány karakterbolállnak a mintasztringek összesen. A vektorban az egyesminták utolsó karakterének megfelelo pozíciókba 1-etírunk, a többibe 0-t.

I Maga az algoritmus alapvetoen nem változik. Ha aD ∧ V 6= 0m feltétel teljesül, akkor az(oka)t a mintá(ka)ttaláltuk meg, amely(ek)nek az utolsó karakteréhez tartozóbitpozícióban 1 szerepel a D ∧ V vektorban.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.27

A Shift-And (Dömölki-féle) algoritmus

Legyen a = atacgatatata, p1 = atat , p2 = gat és p3 = tata!Az algoritmus által használt B bitmátrix a következo lesz:

a t a t g a t t a t aa 1 0 1 0 0 1 0 0 1 0 1g 0 0 0 0 1 0 0 0 0 0 0t 0 1 0 1 0 0 1 1 0 1 0∗ 0 0 0 0 0 0 0 0 0 0 0

A mátrixban ∗ jelzi az ábécé a-tól, g-tol és t-tol különbözoösszes többi karakterét.

Az U, V és D vektorok pedig így fognak kinézni:

U = (1,0,0,0,1,0,0,1,0,0,0)

V = (0,0,0,1,0,0,1,0,0,0,1)

D = (0,0,0,0,0,0,0,0,0,0,0)

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.28

A Shift-Or algoritmus

Az ötlet

Ha a Shift-And algoritmus által használt minden bitet negálunk,és felcseréljük egymással az algoritmusban a konjunkció (∧) ésa diszjunkció (∨) muveleteket, akkor ugyanazt az algoritmustkapjuk. Mivel azonban a SHIFT muvelet mindig egy 0 bitetléptet be balról a D vektorban, az eltolás után elhagyható az Uvektorral végzendo konjunkciós muvelet, és ezért maga az Uvektor is – mivel az úgyis csak az elso bitet nullázná ki.

Megjegyzés

Ha párhuzamosan több mintát szeretnénk keresni, akkor nemhagyható el sem az U vektor, sem a vele végzendokonjunkciós muvelet. Ebben az esetben a Shift-Or algoritmusegyenértéku a Shift-And algoritmussal.Vagy mégis?

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.29

A Shift-Or algoritmus

A megvalósítás

Az elofeldolgozás során felépített B bitmátrix egy c karakterheztartozó sorában

Bc,j =

{0, ha pj = c,1 egyébként.

A kereséshez az algoritmus most csak két m elemusegédvektort (D és V ) használ, melyeket a következoképpendefiniálunk:

Dj = 1 1 ≤ j ≤ m esetén,

Vj =

{0, ha j = m,

1 egyébként.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.30

A Shift-Or algoritmus

A SHIFT muvelet

Legyen x = (x1, x2, . . . , xm−1, xm)! Jelölje SHIFT(x) azt avektort, melyre

SHIFT(x) = SHIFT(x1, x2, . . . , xm−1, xm) = (0, x1, x2, . . . , xm−1)!

Az a alapsztringet karakterenként vizsgáljuk végig, és mindenai karakter érintésekor frissítjük a D vektort a következoformula felhasználásával:

D = SHIFT(D) ∨ Bai .

Ha a keresés során az i-edik karakter feldolgozása utánteljesül a

D ∨ V 6= 1m = (1,1, . . . ,1︸ ︷︷ ︸m

)

feltétel, akkor megtaláltuk a p mintasztring egy elofordulását aza alapsztringben. A minta elso karaktere ekkor az alapsztring(i −m + 1)-edik karakterére illeszkedik.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.31

A kereso algoritmus

function SHIFT_Or(A, P)

1: n← HOSSZ(A)

2: m← HOSSZ(P)

3: for all c ∈ Σ do

4: for j← 1 to m do

5: if P[j] = c then

6: Bc,j ← 0

7: else

8: Bc,j ← 1

9: end if

10: end for

11: end for

12: for j← 1 to m do13: Dj ← Vj ← 114: end for15: Vm ← 016: for i← 1 to n do17: D ← SHIFT(D) ∨ BA[i]

18: if D ∨ V 6= 1m then19: return i-m+120: end if21: end for22: return 0end function

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.32

A Shift-Or algoritmus

Legyen a = atacgatatata és p = atat !A Shift-Or algoritmus által használt B bitmátrix a következolesz:

a t a ta 0 1 0 1t 1 0 1 0∗ 1 1 1 1

A mátrixban ∗ jelzi az ábécé a-tól és t-tol különbözo összestöbbi karakterét.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.33

A Shift-Or algoritmus

i ai D SH(D) Bai D′

1 a (1, 1, 1, 1) (0, 1, 1, 1) (0, 1, 0, 1) (0, 1, 1, 1)2 t (0, 1, 1, 1) (0, 0, 1, 1) (1, 0, 1, 0) (1, 0, 1, 1)3 a (1, 0, 1, 1) (0, 1, 0, 1) (0, 1, 0, 1) (0, 1, 0, 1)4 c (0, 1, 0, 1) (0, 0, 1, 0) (1, 1, 1, 1) (1, 1, 1, 1)5 g (1, 1, 1, 1) (0, 1, 1, 1) (1, 1, 1, 1) (1, 1, 1, 1)6 a (1, 1, 1, 1) (0, 1, 1, 1) (0, 1, 0, 1) (0, 1, 1, 1)7 t (0, 1, 1, 1) (0, 0, 1, 1) (1, 0, 1, 0) (1, 0, 1, 1)8 a (1, 0, 1, 1) (0, 1, 0, 1) (0, 1, 0, 1) (0, 1, 0, 1)

9 t (0, 1, 0, 1) (0, 0, 1, 0) (1, 0, 1, 0) (1, 0, 1, 0)

10 a (1, 0, 1, 0) (0, 1, 0, 1) (0, 1, 0, 1) (0, 1, 0, 1)

11 t (0, 1, 0, 1) (0, 0, 1, 0) (1, 0, 1, 0) (1, 0, 1, 0)

12 a (1, 0, 1, 0) (0, 1, 0, 1) (0, 1, 0, 1) (0, 1, 0, 1)

A táblázatból látható, hogy az algoritmus kétszer, a 9. és a 11. karakterfeldolgozása után állapíthatja meg, hogy D′ ∨ V 6= 1m. A mintasztring így a9− 4 + 1 = 6. és 11− 4 + 1 = 8. pozícióktól kezdve fordul elo azalapsztringben.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.34

Boyer-Moore mintaillesztés

function BOYER_MOORE_ILLESZTO(A, P)

1: n← méret(A)2: m← méret(P)3: méret(SHIFT)← |Σ|4: for x in Σ do5: SHIFT[x]← m + 16: end for7: for j← 1 to m do8: SHIFT[P[j]]← m + 1 - j9: end for

10: k← 011: j← 1

12: while k ≤ n - m és j ≤ m do13: if P[j] = A[k+j] then14: j← j + 115: else if k + m < n then16: k← k + SHIFT[A[k+m+1]]17: j← 118: else19: return 020: end if21: end while22: return k+1

end functionLegjobb eset: Θ

( nm+1

)Legrosszabb eset: Θ (n ∗ m) Mindig helyesen muködik?

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.34

Boyer-Moore mintaillesztés

function BOYER_MOORE_ILLESZTO(A, P)

1: n← méret(A)2: m← méret(P)3: méret(SHIFT)← |Σ|4: for x in Σ do5: SHIFT[x]← m + 16: end for7: for j← 1 to m do8: SHIFT[P[j]]← m + 1 - j9: end for

10: k← 011: j← 1

12: while k ≤ n - m és j ≤ m do13: if P[j] = A[k+j] then14: j← j + 115: else if k + m < n then16: k← k + SHIFT[A[k+m+1]]17: j← 118: else19: return 020: end if21: end while22: return k+1

end functionLegjobb eset: Θ

( nm+1

)Legrosszabb eset: Θ (n ∗ m) Mindig helyesen muködik?

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.35

Rabin-Karp mintaillesztésfunction RABIN_KARP_ILLESZTO(A, P, d, q)

1: n← HOSSZ(A)2: m← HOSSZ(P)3: h← dm−1 mod q4: p← a← 05: for i← 1 to m do6: p← (d·p + P[i]) mod q7: a← (d·a + A[i]) mod q8: end for9: for j← 0 to n - m do

10: if p = a és P = A[j+1..j+m] then11: return j+112: end if13: a← (d·(a - A[j+1]·h)+A[j + m + 1]) mod q14: end for15: return 0end functionJól általánosítható – pl. két dimenziós mintákra (képek) is.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.35

Rabin-Karp mintaillesztésfunction RABIN_KARP_ILLESZTO(A, P, d, q)

1: n← HOSSZ(A)2: m← HOSSZ(P)3: h← dm−1 mod q4: p← a← 05: for i← 1 to m do6: p← (d·p + P[i]) mod q7: a← (d·a + A[i]) mod q8: end for9: for j← 0 to n - m do

10: if p = a és P = A[j+1..j+m] then11: return j+112: end if13: a← (d·(a - A[j+1]·h)+A[j + m + 1]) mod q14: end for15: return 0end functionJól általánosítható – pl. két dimenziós mintákra (képek) is.

Sztring

Kósa MárkPánovics János

Szathmáry LászlóHalász Gábor

A sztringadatszerkezet

A mezítlábas (bruteforce) algoritmus

A Knuth–Morris–Pratt-algoritmus

Az elofeldolgozóalgoritmus

A kereso algoritmus

A Shift-And(Dömölki-féle)algoritmus

A Shift-Or algoritmus

Boyer-Mooremintaillesztés

Rabin-Karpmintaillesztés

Reguláris kifejezések

8.36

Összetett minták / reguláris kifejezések

„ab*c?d.e+f”

*: a megelozo ’karakter’ tetszoleges számú elofordulása?: a megelozo ’karakter’ nulla vagy egy elofordulása+: a megelozo ’karakter’ egy vagy több elofordulása.: tetszoleges karakter

Az „ab*c?d.e+f” minta illeszkedik az alábbi alapsztringekre:

„fgabbbdreefad”, „rtacdhefr”, „sabbbcdeeefh”, „addef”,

és nem illeszkedik az alábbiakra:

„abbckld”, „acdb”, „cvfdcd”

top related