String-Matching II Jan Salmen
String-Matching II Boyer-Moore Algorithmus
1.1 Bad character Strategie... oh, der String is n Zeichen lang... Muster s
... oh, der String is n Zeichen lang... Muster s j = m = 6j = m = 6
... oh, der String is n Zeichen lang... Muster s j = m = 6j = m = 6
... oh, der String is n Zeichen lang... Muster s j = 5j = 5
... oh, der String is n Zeichen lang... Muster s j = 4j = 4
... oh, der String is n Zeichen lang... Muster Muster ? s+1 s
... oh, der String is n Zeichen lang... Muster Muster ? s+2 s
... oh, der String is n Zeichen lang... Muster Muster ? s s+3
... oh, der String is n Zeichen lang... Muster s j = 4j = 4
... oh, der String is n Zeichen lang... Muster s j = 4j = 4 d is bad character
... oh, der String is n Zeichen lang... Muster s j = 4j = 4 d is bad character d does not appear in Muster
... oh, der String is n Zeichen lang... Muster s j = 4j = 4 d is bad character d does not appear in Muster possible shift: j
... oh, der String is n Zeichen lang... Muster s+4
... oh, der String is n Zeichen lang... Muster s+4 j = 6j = 6
... oh, der String is n Zeichen lang... Muster s+4 j = 6j = 6
... oh, der String is n Zeichen lang... Muster s+4 j = 5j = 5
... oh, der String is n Zeichen lang... Muster s+4 j = 5j = 5 t is bad character
... oh, der String is n Zeichen lang... Muster s+4 j = 5j = 5 t is bad character t is at Position 4 in Muster
... oh, der String is n Zeichen lang... Muster s+4 j = 5j = 5 t is bad character t is at Position 4 in Muster possible shift: 5 – 4 = 1
... oh, der String is n Zeichen lang... Muster s+4 j = 5j = 5 t is bad character t is at Position 4 in Muster possible shift: 5 – 4 = 1 (generally: j – k)
... oh, der String is n Zeichen lang... Muster s+5
... oh, der String is n Zeichen lang... Muster s+5 j = 6j = 6
... oh, der String is n Zeichen lang... Muster s+5 j = 6j = 6
... oh, der String is n Zeichen lang... Muster s+11
... oh, der String is n Zeichen lang... Muster s+11 j = 6j = 6
... oh, der String is n Zeichen lang... Muster s+11 j = 6j = 6
... oh, der String is n Zeichen lang... Muster s+13
c Σ Muster a e m r s t u M
a 0 e 5 m 0 r 6 s 3 t 4 u 2 M 1 c Σ Muster Last occurence Function loc(c) = k
a 0 e 5 m 0 r 6 s 3 t 4 u 2 M 1 Shift: j – k c Σ Muster Last occurence Function loc(c) = k
k < j :Shift 1... oh, der String is n Zeichen lang... Muster j = 5j = 5 Shift: j – k loc(c) = k
k < j :Shift 1 k = 0 : Shift over j... oh, der String is n Zeichen lang... Muster j = 6j = 6 Shift: j - k loc(c) = k
k < j :Shift 1 k = 0 : Shift over j k = j : not possibly... oh, der String is n Zeichen lang... Muster j = 6j = 6 Shift: j - k loc(c) = k
k < j :Shift 1 k = 0 :Shift over j k = j :not possible k > j :Shift < 0... oh, der Beer is n Zeichen lang... Muster Shift: j - k j = 4j = 4 loc(c) = k
For all c Σ loc(c) = 0 For all i {1,..., m} loc(P[m]) = i
For all c Σ loc(c) = 0 For all i {1,..., m} loc(P[m]) = i Running time : O( |Σ| + m)