sztring kósa márk pánovics jános 8. eloadás˝ szathmáry lászló...
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/29.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/31.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/32.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/33.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/34.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/35.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/36.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/37.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/38.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022071213/602d7af48ca5f77bd17ba1c7/html5/thumbnails/39.jpg)
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”