1.5 Boyer-Moore-Algorithmustheo.cs.ovgu.de/lehre03w/text/folien/folien04.pdf1.5...
Transcript of 1.5 Boyer-Moore-Algorithmustheo.cs.ovgu.de/lehre03w/text/folien/folien04.pdf1.5...
1.5 Boyer-Moore-Algorithmus
• Suche nach Vorkommen von P in T von links nach rechts.
• In einer Phase erfolgen Vergleiche von rechts nach links.
• Verschiebungsheuristiken: Bad Character und Good Suffix.
• Laufzeit: O(mn) im schlechtesten Fall, O(n/σ) im durchschnittlichen Fall.
• Es gibt Varianten mit Laufzeit O(n) im schlechtesten Fall, O(n·log mm ) im durch-
schnittlichen Fall.
R. Stiebe: Textalgorithmen, WS 2003/04 45
Bad Character Regel
Findet man beim ersten Vergleich das Textsymbol x, so darf man P am Endeder Phase so weit verschieben, daß das rechteste Vorkommen von x in P aufdiese Textposition trifft.
x T
yx P
x P-
R. Stiebe: Textalgorithmen, WS 2003/04 46
Good Suffix Regel – Teil 1
Stimmt ein Suffix α von P mit dem aktuellen Text uberein, so darf man Pso weit verschieben, daß das letze Vorkommen von α in P ′ = P [1 . . .m − 1]gegenuber dem entsprechenden Text steht.
α T
α αα P
αα P-
R. Stiebe: Textalgorithmen, WS 2003/04 47
Good Suffix Regel – Teil 2
Sollte ein Vorkommen des Suffixes α nicht existieren, so darf man P so weitverschieben, daß das langste Suffix von α, das ein Prafix von P ′ ist, gegenuberdem Ende des aktuellen Textstuckes steht.
α β T
α ββ P
β P-
R. Stiebe: Textalgorithmen, WS 2003/04 48
Boyer-Moore-Verschiebungsregel
• Tritt im ersten Vergleich ein Mismatch auf, so verschiebe nach der BadCharacter Regel.
• Anderenfalls verschiebe nach der Good Suffix Regel.
Bemerkung: Es gibt zahlreiche Varianten, z.B.:
Horspool-Algorithmus: Verschiebe stets nach der Bad Character Regel.
R. Stiebe: Textalgorithmen, WS 2003/04 49
Formalisierung
Definition. Fur P ∈ Σ∗ mit |P | = m und x ∈ Σ ist
Rx(P ) := max ({1 ≤ i < m : P [i] = x} ∪ {0}) ,
d.h., Rx(P ) ist das letzte Vorkommen von x in P vor der letzten Stelle von P .
Definition. Sei P ∈ Σ∗ mit |P | = m. Fur 1 ≤ i ≤ m sei
Li(P ) := max
({j : m − i + 1 ≤ j < m ∧ P [i . . . m] = P [j + i − m . . . j]} ∪
{j : 0 ≤ j ≤ m − i ∧ P [m − j + 1 . . . m] = P [1 . . . j]})
`i(P ) := max{j : 0 ≤ j ≤ m − i ∧ P [m − j + 1 . . . m] = P [1 . . . j]},
d.h. `i ist die Lange des langsten echten Suffixes von P [i . . . m], das Prafix von P ist, und Li ist
die letzte Position, an der in P [1 . . . m − 1] ein Vorkommen von P [i . . . m] endet, bzw. `i, falls
ein solches Vorkommen nicht existiert.
R. Stiebe: Textalgorithmen, WS 2003/04 50
Beispiel
Fur P = ababcbab mit Σ = {a, b, c, d} ergibt sich:
x a b c dRx 7 6 5 0
i 1 2 3 4 5 6 7 8Li 2 2 2 2 2 4 4 6
Dies fuhrt zu folgenden Verschiebungen.
Suchwort: ababcbab ababcbab ababcbabTextausschnitt: .......d... .....aab.. .cabcbab...Verschiebung: 8 4 6
R. Stiebe: Textalgorithmen, WS 2003/04 51
Algorithmus 1.6 Boyer-Moore-AlgorithmusEingabe: Worter P , T mit |P | = m, |T | = n(Die Werte Rx und Li fur P sind bekannt)Ausgabe: Menge S der Vorkommen von P in T(1) S ← ∅; k ← m;(2) while k ≤ n(3) i← m; j ← k; x← T [k];(4) while i ≥ 1 and P [i] = T [j](5) i← i− 1; j ← j − 1;(6) if i = 0 then S ← S ∪ {k −m + 1};(7) if i = m then k ← k + m−Rx;(8) else k ← k + m− Li+1;
Satz. Der Boyer-Moore-Algorithmus findet alle Vorkommen von P in T .
R. Stiebe: Textalgorithmen, WS 2003/04 52
Boyer-Moore-Praprozessing in Linearzeit
Algorithmus 1.7 BM-Praprozessing: Rx-WerteEingabe: Wort P ∈ Σ∗, |P | = mAusgabe: Rx(P ) fur x ∈ Σ(1) foreach x ∈ Σ(2) Rx ← 0;(3) for i← 1 to m− 1(4) x← P [i]; Rx ← i;
Satz. Die Werte Rx(P ) konnen mit einem Aufwand von O(m + σ) bestimmtwerden.
R. Stiebe: Textalgorithmen, WS 2003/04 53
BM-Praprozessing – `i-Werte
Algorithmus 1.8 BM-Praprozessing: `i-WerteEingabe: Wort P ∈ Σ∗, |P | = mAusgabe: `i(P ) fur 1 ≤ i ≤ m(1) Bestimme die Rander von P und speichere ihre Langen in fallender Reihen-
folge als Stack L;(Das oberste Element von L ist Border(P ), das unterste ist 0.)
(2) i← 1;(3) while L nicht leer(4) `← Pop(L);(5) while ` ≤ m− i(6) `i ← `; i← i + 1;
Satz. Algorithmus 1.8 berechnet fur ein Wort P der Lange m die Werte `i
(1 ≤ i ≤ m) in einer Zeit von O(m).
R. Stiebe: Textalgorithmen, WS 2003/04 54
BM-Praprozessing – Li-Werte
• ahnlich zum MP-Algorithmus Verwendung von Randern (diesmal der Suffixe)
• offensichtlich: Li(P ) ≥ `i(P ) fur alle i
Definition. Fur 1 ≤ i ≤ |P | = m sei Borderri (P ) die Lange des langsten Randes
von P [i . . .m].
Offensichtlich: Borderri (P ) = Borderm−i+1(P r),
d.h. die Werte Borderri sind in Zeit O(m) berechenbar.
R. Stiebe: Textalgorithmen, WS 2003/04 55
Algorithmus 1.9 BM-Praprozessing: Li-WerteEingabe: Wort P ∈ Σ∗, |P | = mAusgabe: Li(P ) fur 1 ≤ i ≤ m(1) Berechne Borderr
i fur 1 ≤ i ≤ m.(2) for i← 1 to m(3) Li ← `i;(4) i← m; k ← m− 1; j ← k;(5) while j > 0(6) while j > 0 and P [i] = P [j](7) if Li < k then Li ← k;(8) i← i− 1; j ← j − 1;(9) if j = k then k ← j − 1; j ← k; i← m;(10) else k ← j + Borderr
i+1; i← m− Borderri+1;
Satz. Algorithmus 1.9 berechnet fur ein Wort P der Lange m die Werte Li
(1 ≤ i ≤ m) in einer Zeit von O(m).
R. Stiebe: Textalgorithmen, WS 2003/04 56
Laufzeit im schlechtesten Fall
• Θ(mn) fur P = am, T = an
• Laufzeit betragt Θ(n), falls P nicht in T vorkommt (Knuth, Morris, Pratt)Beweis: siehe [Gusfield], Abschnitt 3.2
• → lineare Laufzeit bei Beachtung der folgenden Regel
Regel von GalilWurde ein Vorkommen von P in T gefunden, so prufe in der nachsten Phasehochstens die letzten Per(P ) Zeichen.
R. Stiebe: Textalgorithmen, WS 2003/04 57
Durchschnittliche Laufzeit des Boyer-Moore-Algorithmus
Der Einfachheit halber Betrachtung des Horspool-Algorithmus(Verschiebung immer nach der Bad Character Regel)
Comp(m) – mittlere Anzahl der Vergleiche in einer PhaseWie bei Naivem Algorithmus: Comp(m) ≤ σ
σ−1.
Shift(m) – mittlere Verschiebung nach einer Phase
Mittlere Laufzeit: t(m,n) ≈ n·Comp(m)Shift(m) .
R. Stiebe: Textalgorithmen, WS 2003/04 58
Mittlere Verschiebung Shift(m)
Shift(m) =m−1∑i=0
pi · (i + 1)
pi: Wahrscheinlichkeit, daß Rx(P ) = m− 1− i fur zufalliges x ∈ Σ und P ∈ Σk.
pi =(
σ−1σ
)i · 1σ fur 0 ≤ i ≤ m− 2, pm−1 =
(σ−1
σ
)m−1
Rechnung analog zum Naiven Algorithmus ergibt:Shift(m) ≈ σ
(1−
(1− 1
σ
)m).
Folgerung. Shift(m) = Θ(min{σ,m}).
Fur σ = 100 erhalten wir beispielsweise:
m 2 10 50 100 200 1000Shift(m) 1.99 9.6 39.5 63.4 86.6 99.996
R. Stiebe: Textalgorithmen, WS 2003/04 59
Erweiterte Bad Character Regel
• Bestimme letztes Vorkommen in P fur jedes Wort aus Σq, q ≥ 1.
• Bestimme in jeder Phase die letzten q Textzeichen β und verschiebe P bis zumletzten Vorkommen von β.
Definition. Fur q ≥ 1, α ∈ Σq, P ∈ Σ∗, |P | = m ≥ q sei Rα(P ) die rechtesteStelle in P ′ = P [1 . . .m − 1], an der ein Vorkommen von α endet oder die Langedes langsten Suffixes von α, das Prafix von P ist, falls α nicht in P ′ auftritt.
Erweiterte Bad Character RegelErgeben die q letzten aktuellen Textzeichen das Wort α, so verschiebe um denBetrag m−Rα(P ).
R. Stiebe: Textalgorithmen, WS 2003/04 60
Erweiterte Bad Character Regel – Beispiel
P = abaababb, q = 3
α aaa aab aba abb baa bab bba bbbRα 1 5 6 0 4 7 1 0
mittlere Verschiebung fur P : (7 + 3 + 2 + 8 + 4 + 1 + 7 + 8)/8 = 5.
R. Stiebe: Textalgorithmen, WS 2003/04 61
Erweiterte Bad Character Regel – Laufzeit
• Zeit fur Praprozessing: Θ(m + σq)
• Durchschnittliche Zeit fur die Suche
Comp(m) ≈ q, Shift(m) = Θ(min{m,σq})t(m,n) = Θ( n·q
min{m,σq})
• Optimale Wahl
q = logσ m: t(m,n) = Θ(n·log mm )
R. Stiebe: Textalgorithmen, WS 2003/04 62
1.6 Apostolico-Giancarlo-Algorithmus
• Variante des Boyer-Moore-Algorithmus
• Vergleiche werden eingespart, indem einige gefundene Ubereinstimmungen mitdem Text gespeichert werden.
• Laufzeit im schlechtesten Fall: Θ(n) (relativ einfach nachweisbar)
R. Stiebe: Textalgorithmen, WS 2003/04 63
Zusatzliches Praprozessing – N-Werte
Definition. Es sei P ein Wort der Lange m. Fur 1 ≤ i ≤ m − 1 sei Ni(P ) dieLange des langsten Suffixes von P , das Suffix von P [1 . . . i] ist.
Offensichtlich: Ni(P ) = Zm−i+1(P r) fur |P | = m.
Beispiel. Fur P = ababcbab erhalt man
i 1 2 3 4 5 6 7Ni 0 2 0 3 0 1 0
R. Stiebe: Textalgorithmen, WS 2003/04 64
Speicherung gefundener Ubereinstimmungen
Jeder Stelle j des Textes wird ein Wert Mj zugeordnet, der mit 0 initialisiert ist. Wirdin einer Phase des Algorithmus die Stelle k als Ende eines Vorkommens getestet, sowird Mk am Ende der Phase derart modifiziert, daß folgende Bedingungen erfulltsind.
(*) P [m−Mk + 1 . . .m] = T [k −mk + 1 . . . k].
(**) Fur alle k −Mk < j < k gilt j −Mj ≥ k −Mk.
R. Stiebe: Textalgorithmen, WS 2003/04 65
Ein Schritt im Algorithmus
In einer Phase sei bisher die Ubereinstimmung P [i + 1 . . .m] = T [j + 1 . . . n]festgestellt worden.
• Mj = 0: expliziter Vergleich von P [i] und T [j] (Falle 1,2)Wir werden zeigen: j liegt in keinem Intervall [`−M` + 1, `].
• Mj 6= 0: kein expliziter Vergleich; weiteres Vorgehen ergibt sich aus Ni und Mj
(Falle 3,4,5)
Fall 1: Mj = 0 und P [i] = T [j]Die Phase wird fortgesetzt. i← i− 1; j ← j − 1;
Fall 2: Mj = 0 und P [i] 6= T [j].Die Phase wird beendet; Verschiebung wie beim Boyer-Moore-Algorithmus.Anpassung von Mk: Mk ← k − j
R. Stiebe: Textalgorithmen, WS 2003/04 66
Fall 3: Ni ≥Mj
T
P
Es gilt P [i−Mj + 1 . . . i] = T [j −Mj + 1 . . . j]. Die nachsten Mj Vergleiche darfman auslassen.i← i−Mj; j ← j −Mj;
R. Stiebe: Textalgorithmen, WS 2003/04 67
Fall 4: Mj > Ni = i
T
P
Es gilt P [1 . . . i] = T [j − i + 1 . . . j], d.h. ein Vorkommen von P wurde gefunden.Ende der Phase. Verschiebung wie beim Boyer-Moore-Algorithmus.Mk ← k − j; (um Bedingung (**) zu erfullen).
R. Stiebe: Textalgorithmen, WS 2003/04 68
Fall 5: Mj > Ni ∧ i > Ni
T
P
Es gilt P [i−Ni + 1 . . . i] = T [j −Ni + 1 . . . j] und P [i−Ni] 6= T [j −Ni],d.h. das erste Mismatch fur die Position k besteht zwischen P [i−Ni] und T [j−Ni].Ende der Phase. Verschiebung wie beim Boyer-Moore-Algorithmusi← i−Ni; Mk ← k − j;
R. Stiebe: Textalgorithmen, WS 2003/04 69
Algorithmus 1.10 Apostolico-Giancarlo-AlgorithmusEingabe: Worter P , T mit |P | = m, |T | = n(Die Werte Rx, Li und Ni fur P sind bekannt)Ausgabe: Menge S der Vorkommen von P in T(1) Initialisiere Mj ← 0 fur 1 ≤ j ≤ n;(2) S ← ∅; k ← m;(3) while k ≤ n(4) i← m; j ← k; x← T [k]; stop← false ;(5) while i ≥ 1 and not stop(6) if Tj = 0 and P [i] = T [j] then i← i− 1; j ← j − 1;(7) if Tj = 0 and P [i] 6= T [j] then stop← true ;(8) if Tj 6= 0 and Ni ≥Mj then i← i−Mj; j ← j −Mj;(9) if Tj 6= 0 and Mj > Ni = i then i← 0;(10) if Tj 6= 0 and Mj > Ni and i > Ni then i← i−Ni; stop← true ;(11) Mk ← k − j; if i = 0 then S ← S ∪ {k −m + 1};(12) if i = m then k ← k + m−Rx;(13) else k ← k + m− Li+1;
R. Stiebe: Textalgorithmen, WS 2003/04 70
Korrektheit und Laufzeit des Algorithmus
Lemma.
1. Vor und nach jedem Schritt gilt
(a) P [i + 1 . . .m] = T [k −m + i + 1 . . . k] und m− i ≥ k − j,(b) j ≤ `−M` fur alle ` > j.
2. Zu jedem Zeitpunkt erfullen die Werte von M1,M2, . . . ,Mn die Bedingungen(*) und (**).
3. Am Ende jeder Phase ist der Wert von i die Stelle in P mit dem ersten Mismatch.
Satz. Der Apostolico-Giancarlo-Algorithmus findet alle Vorkommen von P in Tmit einer Laufzeit von O(m).
R. Stiebe: Textalgorithmen, WS 2003/04 71