Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László...
Transcript of Sztring Kósa Márk Pánovics János 8. eloadás˝ Szathmáry László...
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”