Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Chris Schwiegelshohn Katja Losemann. Geg.: Suchtext y und Muster x p Position im Suchtext und q Position im Muster Init: p=0 und q=0 loop { while y(p.

Ähnliche Präsentationen


Präsentation zum Thema: "Chris Schwiegelshohn Katja Losemann. Geg.: Suchtext y und Muster x p Position im Suchtext und q Position im Muster Init: p=0 und q=0 loop { while y(p."—  Präsentation transkript:

1 Chris Schwiegelshohn Katja Losemann

2 Geg.: Suchtext y und Muster x p Position im Suchtext und q Position im Muster Init: p=0 und q=0 loop { while y(p + q + 1) == x(q + 1) do q = q +1; p = p; q = q; } goto loop Stringalgorithmus

3 Varianten Nur über Berechnung von p und q! Naiv: p = p + 1 und q = q + 1 Knuth-Morris-Prat berechnet p = p + shift x (q) und q = q - shift x (q), wobei shift x (q) = min{shift > 0 |[shift,q] x = [0,q-shift] x }

4 Aufwand von String Matching String-matching Algorithmen: Entweder: in linearer Zeit (Knuth-Morris) Oder: ohne Speicherplatzbedarf (naiv) Jetzt: Beides

5 Terminologie k: beliebig, fest und hinreichend groß z und w Strings w(i): i-ter Buchstabe von Wort w z ist Periode von w, wenn w Präfix von z z ist einfach, wenn für kein i>1 z i = z gilt z ist Präfix-Periode von w, wenn w einfach ist und z k ein Präfix von w ist,

6 (ab) 3 = ababab ist nicht einfach abababa ist dagegen einfach Beide Strings haben dieselben Perioden ab, abab, ababab und sogar abababa String w = (abababa) k abab besitzt mit k>=4 die Präfix-Periode abababa und mit k=3 auch ab Beispiele

7 Weitere Terminologie Gegeben String w und p <= |w| Funktion reach w (p): reach w (p) = max{q <= |w| | [0,p] w ist Periode von [0,q] w }

8 Beispiele String w = (abababa) k abab reach w (1) = 1 reach w (2) = 7 reach w (7) = |w|

9 Sei x ein String mit Länge: p 1 + p 2 und habe x Perioden der Länge p 1 und p 2, dann hat x eine Periode der Länge des GGT(p 1,p 2 ) Perioden Lemma

10 Verschiedene Präfix-Perioden desselben Strings, haben mindestens verschiedene Längen eines Faktor von (k-1). Es gilt: Sei w String mit Präfix-Periode mit Länge p 1 und einem einfachen Präfix der Länge p 2 > p 1 mit reach w (p 2 ) = k*p 2, dann ist p 2 > (k-1)p 1. Korollar

11 Geg.: Suchtext y und Muster x p Position im Suchtext und q Position im Muster Init: p=0 und q=0 loop { while y(p + q + 1) == x(q + 1) do q = q +1; p = p; q = q; } goto loop Stringalgorithmus

12 Neue Definition (p,q) = (p + shift x (q), q – shift x (q)), wenn shift x (q) q/k = (p + max(1, q/k), 0) sonst Fall 1 benötigt zusätzlichen Speicherplatz! Können wir den Fall 1 vermeiden?

13 Vorgehen Leider nicht ganz Ist k groß, dann sollte der erste Fall relativ selten vorkommen. Es lässt sich ein Zusammenhang zwischen der Häufigkeit von shift x (q) q/k und Präfix- Perioden des Suchmusters x erstellen.

14 Vorkommen von shift x (q) q/k Lemma 1: Wenn shift x (q)<=q/k, dann [0, shift x (q)] x Präfix-Periode von x. Lemma 2: Wenn [0, shift x (q)] x Präfix-Periode von x, dann shift = shift x (q) <= q/k k * shift <= q <= reach x (shift)

15 Suche nach einem festen Muster Dekompositions Theorem: Jedes Muster x kann in Strings u und v aufgeteilt werden, so dass x = uv und v hat maximal eine Präfix-Periode und |u| = O(shift v ( |v| )) Beweis: Klemmen wir uns

16 Idee des Algorithmus ist, nach Vorkommen von Suffix v zu suchen Fall 1: v hat keine Präfix-Periode Wegen Lemma 1 kann shift x (q) q/k nicht eintreten ( p, q ) = ( p + max ( 1, q/k, 0 )

17 Fall 2: v hat genau eine Präfix-Periode der Länge p 1. Wegen Lemma 2 gilt shift x (q) q/k genau dann wenn k p 1 q reach v (p 1 ) Also gilt: ( p, q ) = ( p + shift x (q), q - shift x (q) ) = ( p + p 1, q – p 1 )

18 Suche nach Suffix v: f(p,q) = a 1 * p + a 2 * q = O(|y| + |v|) Wähle a 1 und a 2 geschickt, so dass die Funktion linear steigt Suche nach u: Wegen des DekompositionsLemmas kann u in y nur |y| / shift(v) häufig vorkommen und somit in O(|y|). Suche daher naiv. Insgesamt: O(|v| + |y|) = O(|x| + |y|)

19 Speicherplatzbedarf: Da wir nur eine Präfix Periode haben konstant! FERTIG !


Herunterladen ppt "Chris Schwiegelshohn Katja Losemann. Geg.: Suchtext y und Muster x p Position im Suchtext und q Position im Muster Init: p=0 und q=0 loop { while y(p."

Ähnliche Präsentationen


Google-Anzeigen