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

39
Sztring Kósa Márk Pánovics János Szathmáry László Halász Gábor A sztring adatszerkezet A mezítlábas (brute force) algoritmus A Knuth–Morris–Pratt- algoritmus Az el ˝ ofeldolgozó algoritmus A keres˝ o algoritmus A Shift-And (Dömölki-féle) algoritmus A Shift-Or algoritmus Boyer-Moore mintaillesztés Rabin-Karp mintaillesztés Reguláris kifejezések 8.1 8. el ˝ oadás Sztring Sztringkeres ˝ o algoritmusok. Adatszerkezetek és algoritmusok el˝ oadás 2020. április 14. Kósa Márk, Pánovics János, Szathmáry László és Halász Gábor Debreceni Egyetem Informatikai Kar

Upload: others

Post on 05-Oct-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 2: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 3: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 4: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 5: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 6: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 7: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 8: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 9: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 10: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 11: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 12: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 13: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 14: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 15: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 16: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 17: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 18: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 19: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 20: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 21: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 22: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 23: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 24: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 25: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 26: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 27: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 28: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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)

Page 29: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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?

Page 30: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 31: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 32: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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

Page 33: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 34: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 35: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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?

Page 36: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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?

Page 37: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 38: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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.

Page 39: Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László …halasz/Adatszerk-PTI-2017/... · 2020. 4. 7. · egy karakter. Az x egy r borderebovíthet˝ o˝ a-val, ha

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”