4. Textalgorithmen Arten von String-Matching-Problemen ...
4. Textalgorithmen Arten von String-Matching-Problemen ...
4. Textalgorithmen Arten von String-Matching-Problemen ...
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