1.5 Boyer-Moore-Algorithmustheo.cs.ovgu.de/lehre03w/text/folien/folien04.pdf1.5...

27
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 m m ) im durch- schnittlichen Fall. R. Stiebe: Textalgorithmen, WS 2003/04 45

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