16.01.2015 Aufrufe

4. Textalgorithmen Arten von String-Matching-Problemen ...

4. Textalgorithmen Arten von String-Matching-Problemen ...

4. Textalgorithmen Arten von String-Matching-Problemen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>4.</strong> <strong>Textalgorithmen</strong> <strong>String</strong> <strong>Matching</strong>: Boyer und Moore<br />

Veranschaulichung:<br />

pat:<br />

j − s<br />

↓<br />

- - - - a b c b c<br />

pat: - - - - a b c b c<br />

↑<br />

j<br />

text: - - - - - - a b c a b c - - - - -<br />

↑<br />

↑<br />

i i + j − 1<br />

<strong>4.</strong> <strong>Textalgorithmen</strong> <strong>String</strong> <strong>Matching</strong>: Boyer und Moore<br />

Die entsprechenden Werte werden in einer Preprocessingphase ermittelt<br />

und in der Shift-Tabelle D abgelegt.<br />

D[j] := min{s| (BM1) und (BM2) gilt für j und s }<br />

s>0<br />

Der Algorithmus <strong>von</strong> Boyer und Moore verwendet nun im Falle eines<br />

Mismatches an Position j den in D[j] abgelegten Wert, um pat nach<br />

rechts zu verschieben.<br />

Damit man keinen Match verpaßt, muß s wiederum möglichst klein<br />

gewählt werden.<br />

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06 194<br />

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06 196<br />

<strong>4.</strong> <strong>Textalgorithmen</strong> <strong>String</strong> <strong>Matching</strong>: Boyer und Moore<br />

Veranschaulichung:<br />

naechstmoeglicher Match<br />

fuer BM2 !=<br />

Vergleich<br />

= fuer BM1<br />

Mismatch<br />

Pattern<br />

1<br />

j<br />

m<br />

<strong>4.</strong> <strong>Textalgorithmen</strong> <strong>String</strong> <strong>Matching</strong>: Boyer und Moore<br />

Algorithmus <strong>4.</strong>7. [Algorithmus <strong>von</strong> Boyer und Moore]<br />

i := 1<br />

while i ≤ n − m + 1 do<br />

j := m<br />

while j ≥ 1 and pat[j] = text[i + j − 1] do j := j − 1 end<br />

if j = 0 then return true<br />

i := i + D[j]<br />

end<br />

return false<br />

Text<br />

<br />

Beispiel <strong>4.</strong><strong>4.</strong> D[j] lautet für F 7 :<br />

j 1 2 3 4 5 6 7 8 9 10 11 12 13<br />

pat[j] a b a a b a b a a b a a b<br />

D[j] 8 8 8 8 8 8 8 3 11 11 6 13 1<br />

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06 195<br />

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06 197

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!