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>: Morris und Pratt<br />

Berechnung <strong>von</strong> border[j]<br />

<strong>4.</strong> <strong>Textalgorithmen</strong> <strong>String</strong> <strong>Matching</strong>: Morris und Pratt<br />

Lemma <strong>4.</strong>3. Algorithmus <strong>4.</strong>3 benötigt zur Berechnung der Tabelle<br />

border höchstens O(m) Vergleiche.<br />

Beweis. Analog zu Lemma <strong>4.</strong>2. ✷<br />

• Zur Berechnung der Tabelle border wird eine spezielle Version <strong>von</strong><br />

Algorithmus <strong>4.</strong>2 benutzt.<br />

• Man nutzt dabei die aus dem Beweis <strong>von</strong> Lemma <strong>4.</strong>2 bekannte Tatsache<br />

aus, daß der Betrag i + j nie verringert wird.<br />

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

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

<strong>4.</strong> <strong>Textalgorithmen</strong> <strong>String</strong> <strong>Matching</strong>: Morris und Pratt<br />

Algorithmus <strong>4.</strong>3.<br />

border[1] := 0<br />

for j := 2 to m do border[j] := 1 end<br />

i := 2<br />

j := 1<br />

while i ≤ m do<br />

while i + j − 1 ≤ m and pat[j] = pat[i + j − 1] do<br />

j := j + 1<br />

border[i + j − 1] := j<br />

end<br />

i := i + j − border[j]<br />

j := max(border[j], 1)<br />

end<br />

<strong>4.</strong> <strong>Textalgorithmen</strong> <strong>String</strong> <strong>Matching</strong>: Knuth, Morris und Pratt<br />

Knuth, Morris und Pratt<br />

Der Algorithmus <strong>von</strong> Morris und Pratt kann noch effizienter gemacht<br />

werden. Man betrachte folgendes Beispiel:<br />

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

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

Es kommt für j = 6 zu einem Mismatch. Wegen border[6] = 3 wird pat<br />

um drei Zeichen nach rechts geschoben.<br />

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

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

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

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!