Exact String Matching II1 Exact String Matching: A Deeper Look at Classical Methods Erweiterte Anwendungen zu Boyer-Moore und Knuth-Morris-Pratt Hauptseminar.

Slides:



Advertisements
Ähnliche Präsentationen
Christian Scheideler SS 2009
Advertisements

Grundlagen des A*-Algorithmus und Anwendung in der Routenplanung
Informatik II: Algorithmen und Datenstrukturen SS 2013
Polynomial Root Isolation
Algebraische Zahlen: Exaktes Rechnen mit Wurzeln
Schnelle Matrizenoperationen von Christian Büttner
Claudio Moraga; Gisbert Dittrich
SST - Sequence Search Tree
Shift-And und Karp-Rabin
Das LCA – Problem in Suffixbäumen
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten KMP, BM.
Suche in Texten (Stringsuche )
Verifizieren versus Berechnen
Christian Schindelhauer
Konstruktion von Suffix Bäumen
Konstruktion von Suffix Bäumen
Bestimmung des Next-Arrays im KMP-Algorithmus
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten Suffix –Tree –Konstruktion Ukkonen Algorithmus.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Seminar parallele Programmierung SS 2003
Algorithmen und Komplexität Teil 1: Grundlegende Algorithmen
Christian Schindelhauer
Christian Schindelhauer
Minimum Spanning Tree: MST
Hauptseminar Automaten und Formale Sprachen
Vortrag zum Thema Brute - Force Algorithmus Vortragende
Mustersuche in Zeichenfolgen
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Effiziente Algorithmen
Effiziente Algorithmen
Kapitel 7: Ausgewählte Algorithmen 7.1 Externes Suchen
Effiziente Algorithmen
Splay Trees Von Projdakov Benjamin.
Flüsse, Schnitte, bipartite Graphen
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/ /23.1.
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Effiziente Algorithmen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Information und Kommunikation
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Information und Kommunikation
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.
Algorithm Engineering „Zeichenkettensuche“
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Analyse der Laufzeit von Algorithmen
Syntax, Semantik, Spezifikation - Grundlagen der Informatik R. Hartwig Kapitel 3 / 1 Algebraische Hülle und Homomorphie A = [A, F ] sei  -Algebra. Eine.
Gliederung der Vorlesung
Binärbäume.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 3 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
 Präsentation transkript:

Exact String Matching II1 Exact String Matching: A Deeper Look at Classical Methods Erweiterte Anwendungen zu Boyer-Moore und Knuth-Morris-Pratt Hauptseminar Automaten und Formale Sprachen: Algorithmen der Bioinformatik Ausarbeitung: Thomas Heilbock

Exact String Matching II2 Gliederung 1.Apostolico-Giancarlo (Boyer-Moore-Variante in Linearzeit) -Wiederholung / Grundlagen -Die Idee / Modifizierungen -Ablauf einer Vergleich/Shift-Phase -Korrektheit / Laufzeit 2.Exact Set Matching (Aho-Corasick, in Anlehnung an Knuth-Morris-Pratt) -Wiederholung / Grundlagen -erste Ansätze -Hilfsmittel: keyword-tree -Hilfsmittel: Fehlerfunktion / FehlerLink -Aho-Corasick komplett 3.Anwendung von Exact Set Matching -Exact Matching mit Wildcards 4.Literatur / Fragen

Exact String Matching II3 -Wiederholung / Grundlagen: -Boyer-Moore -gegeben: Text T=y[0..n-1], Pattern P=x[0..m-1] -Anlegen des linken Endes von P an die Textposition j -Vergleich von rechts nach links -Shift um den maximalen Wert aus der Bad- Character-Regel und der Good-Suffix-Regel 1.Apostolico-Giancarlo - Wiederholung / Grundlagen -

Exact String Matching II4 -Vorverarbeitung: -Für jeden Buchstaben des Textalphabets: Bad-Character-Liste: erstes Auftreten in x[0..m-2] (von rechts) -Für jedes Zeichen i aus P: -Suffix-Liste: Länge des längsten Suffix von x[0..i], das auch Suffix von P ist -Good-Suffix-Liste: Länge des längsten echten Suffix von x[0..i], das Suffix von P ist 1.Apostolico-Giancarlo - Wiederholung / Grundlagen -

Exact String Matching II5 1.Apostolico-Giancarlo - Wiederholung / Grundlagen - -Bad-Character-Regel: -bei Mismatch zwischen den Zeichen y[i+j] und x[i] suche (von rechts) das erste Auftreten von y[i+j] in x Shift-Weite -Good-Suffix-Regel: -wurde ein Suffix u von x bis zu Mismatch an Position x[i] gefunden, suche (von rechts) das erste Auftreten von u in x, so das u einem Zeichen ungleich x[i] folgt Shift-Weite

Exact String Matching II6 -Problem von Boyer-Moore: -Nach jeder Vergleich/Shift-Phase werden potentielle Informationen vergessen -Neues Ziel: -Jedes Zeichen aus T, welches schon einmal zu einem Zeichen aus P gepasst hat (Match) soll nicht noch einmal verglichen werden 1.Apostolico-Giancarlo - Die Idee / Modifikationen -

Exact String Matching II7 Notationen: -Pattern P = y[0..n-1] -Text T = x[0..m-1] -h – Laufvariable auf T -i – Laufvariable auf P -j – Startposition des Vergleichs auf T (rechtes Ende von P) -N(i) – Suffix-Liste für P -M(i) – Substring-Tabelle für T (neu) 1.Apostolico-Giancarlo - Die Idee / Modifikationen -

Exact String Matching II8 Zwei Modifikationen von Boyer-Moore Nutzen einer zusätzlichen Tabelle M(i) für T, welche zur Laufzeit wie folgt ausgefüllt wird: a)Zu Beginn sind alle Werte undefiniert b)Findet der Algorithmus bei einem Vergleich einen Substring der Länge 0<kn, welches Suffix von P ist, wird M(j) auf k gesetzt 1.Apostolico-Giancarlo - Die Idee / Modifikationen -

Exact String Matching II9 1.Apostolico-Giancarlo - Die Idee / Modifikationen - Zwei Modifikationen von Boyer-Moore 2.Nutzen des Wissens aus M und N, um die Suche zu beschleunigen Vergleich/Shift-Phase mit Fallunterscheidung wie folgt: h:=j, i:=n Starte Fallunterscheidung

Exact String Matching II10 -Fallunterscheidung: a) M(h) undefiniert oder M(h)=N(i)=0 Vergleich von T(h) und P(i): i)wenn T(h)=P(i) und i=1, dann berichte Auftreten von P in T an Position (j-n), setze M(j)=n und mache Shift (nach BM) ii)wenn T(h)=P(i) und i>1, dann setze h=h-1, i=i-1 und starte die Fallunterscheidung neu iii)wenn T(h)P(i), dann setzte M(j)=j-h und mache Shift (nach BM) 1.Apostolico-Giancarlo - Ablauf einer Vergleich/Shift-Phase -

Exact String Matching II11 b) M(h)<N(i) P stimmt mit dem Substring aus T von Position i-M(h)+1 zu Position n überein Vergleich muss vor diesem Substring wieder aufgenommen werden: i:=i-M(h), h:=h-M(h), starte Fallunterscheidung neu c) M(h)N(i) und N(i)=i >0, P in T gefunden. M(j):=j-h, mache Shift (nach BM) d) M(h)>N(i) und N(i)<i P und T stimmen von j zu Position i-N(i)+1 überein, dann folgt ein Mismatch M(j):=j-h. mache Shift (nach BM) e) M(h)=N(i) und 0<N(i)<i, P und T stimmen für die ersten M(h) überein, Rest von P muss noch verglichen werden i=i-M(h), h=h-M(h), starte Fallunterscheidung neu 1.Apostolico-Giancarlo - Ablauf einer Vergleich/Shift-Phase -

Exact String Matching II12 -Korrektheit: -zu zeigen: Algorithmus simuliert original BM a)Algorithmus nutzt original Shift-Regeln dieser Teil stimmt b)für jeden Vergleich von P mit einem Textabschnitt aus T muss AG die gleiche Zeichenfolge bis zum ersten Unterschied finden -Betrachtung der Fallunterscheidung: - Fall a) arbeitet nach Boyer-Moore - Fall b,c,e) überspringen eventuell Zeichen, aber nur Match - Fall d) überspringt Mismatches nach Definition von M und N aber nur wirklich ungleiche Bereiche 1.Apostolico-Giancarlo - Korrektheit / Laufzeit -

Exact String Matching II13 -Laufzeit: a)AG macht höchstens 2m Zeichenvergleiche -jede Phase endet durch Mismatch, und jede Phase (außer der letzten) wird gefolgt von einem Shift>0 höchstens m Mismatches -Zeichen werden expliziert nur in Phase 1 verglichen findet ein Vergleich bei T(h) ein Match, wird am Ende der Phase M(j)=j-h+1 (mind.) gesetzt alle Zeichen aus T die Zeichen aus P glichen (während dieser Phase) sind im Intervall [j-M(j)+1.. j)] -Trifft ein anderer Vergleich nun auf so ein Zeichen, ist für dieses M(h)>0 der Vergleich überspringt diesen Bereich um genau M(h) und fährt davor fort 1.Apostolico-Giancarlo - Korrektheit / Laufzeit -

Exact String Matching II14 Zu a)m Matches + m Mismatches 2m Vergleiche b)AG braucht höchstens O(m) zusätzliche Arbeit Zusätzlicher Aufwand: O(m) - Fall a): Vergleich O(m), maximal 2m Vergleiche (siehe a) - Fall c/d): Shift O(m), da maximal m Shifts - Fall b/e): maximal einmal pro Position / Zeichen von T O(m) O(m) Fazit: AG arbeitet in Linearzeit 1.Apostolico-Giancarlo - Korrektheit / Laufzeit -

Exact String Matching II15 2.Exact Set Matching - Wiederholung / Grundlagen - Wiederholung / Grundlagen: –Knuth-Morris-Pratt gegeben: Text T=y[0..n-1], Pattern P=x[0..m-1] Vergleich von links nach rechts Tabelle sp i für Shift-Weiten Zu jeder Position i in Pattern P finde die Länge des längsten echten Suffix von P[0..i-1] das Präfix von P ist

Exact String Matching II16 -Verallgemeinerung vom Exact Matching gegeben: -Satz/Liste von Pattern P=[P 1,...,P z ] -n sei Gesamtlänge aller Pattern aus P -m sei Länge des Textes T gesucht: -Alle Vorkommen aller Pattern aus P in T naheliegender Ansatz: -Jedes Pattern wird einzeln mit einem beliebigen Linearzeit- Algorithmus in T gesucht O(n+zm): Zielvorstellung (Aho-Corasick): -O(n+m+k), k = Anzahl der Vorkommen der Pattern aus P 2.Exact Set Matching - Wiederholung / Grundlagen -

Exact String Matching II17 Keyword-Tree K: gerichteter Baum mit den Eigenschaften: a)genau ein Zeichen pro Kante (genannt: Bezeichnung) b)zwei Kanten, die aus dem selben Knoten heraus führen, haben unterschiedliche Bezeichnungen c)Jedes Pattern P i kann auf einem Pfad im Baum, von der Wurzel bis zu einem Knoten, abgebildet werden, so dass die Zeichen an den Kanten der Reihe nach gelesen, P i ergeben 2.Exact Set Matching - Hilfsmittel: keyword-tree -

Exact String Matching II18 Für endliches Alphabet ist keyword-tree zu P in O(n) berechenbar: Def.: K i sei der keyword-tree der Pattern P 1... P i von P a)K 1 : von Wurzel aus beschrifte jede Kante (nach Reihenfolge) des Zweiges mit dem jeweils nächsten Zeichen von P 1. benenne letzten Knoten mit 1 b) K 2 aus K 1 : -folge dem Pfad von K 1 bis das längste Präfix von P 2 in P 1 erreicht ist -Pfad endet entweder, wenn P 2 zu Ende ist (P 2 in P 1 ) oder wenn ein Knoten v keine passende ausgehende Kante mehr hat für den letzten Fall starte neuen Pfad ab diesem Knoten -benenne letzten Knoten mit 2 2.Exact Set Matching - Hilfsmittel: keyword-tree -

Exact String Matching II19 c)K i +1 aus K i : -von Wurzel aus folge genau dem Pfad K i, der mit den Zeichen von P i +1 (in Reihenfolge) übereinstimmt -entweder P i +1 kommt in K i vor oder es gibt Knoten, an dem eine neue Kante angefügt werden muss, um das Pattern fortzuführen Für jedes Pattern P i braucht man O(|P i +1|) Zeit zum Einfügen des Pattern P i +1 in K i O(n) über alle Pattern 2.Exact Set Matching - Hilfsmittel: keyword-tree -

Exact String Matching II20 Naiver Ansatz einer Suche: -starte für jede Position l in T und: - folge dem einen Pfad in K, der einem Präfix von T gleicht - ein mit i nummerierter Knoten gibt das Vorkommen von P i in T an - wenn kein weiteres Match zu funden ist, gehe setze l:=l+1 … aber: Zeitaufwand O(m*n) Erinnerung an Knuth-Morris-Pratt: -verbessern der naiven Idee Shift 1 2.Exact Set Matching - erste Ansätze -

Exact String Matching II21 Aho-Corasick-Ansatz: -Shift 1 überspringen von initialen Teilen von Pfaden in K, wenn möglich -verallgemeinern der KMP-Funktion sp i, damit sie für Pattern-Sätze funktioniert -vorerst mit Einschränkung: kein Pattern aus P darf echter Substring eines anderen Pattern aus P sein 2.Exact Set Matching - erste Ansätze -

Exact String Matching II22 Fehlerfunktion für keyword-trees: Def.:Jeder Knoten v in K bekommt den Namen des Substrings, den er repräsentiert genannt L(v) Def.:Für jeden Knoten v in K sei lp(v) die Länge des längsten echten Suffix von String L(v), das Präfix eines Pattern aus P ist Lemma:Sei α das lp(v)- lange Suffix von String L(v). Dann existiert genau ein Knoten im keyword-tree, der die Bezeichnung α hat. 2.Exact Set Matching - Hilfsmittel: Fehlerfunktion/ FehlerLink -

Exact String Matching II23 Def.:Für einen Knoten v in K sei n v der eine Knoten in K, der mit dem Suffix von L(v) der Länge lp(v) benannt ist. Ist lp(v) = 0 für einen Knoten v, dann ist n v gleich der Wurzel. Def.:Das geordnete Paar (v,n v ) nennen wir FehlerLink. 2.Exact Set Matching - Hilfsmittel: Fehlerfunktion/ FehlerLink -

Exact String Matching II24 Nutzen des FehlerLink zum Beschleunigen der Suche: -Annahme: FehlerLinks zu allen v:v n v sind bekannt -l indiziert die Startposition in T, Zeiger c zeigt auf das aktuelle Zeichen in T, das mit einem Zeichen von K verglichen werden soll -Algorithmus: L:=1; c:=1; w:=root Wiederhole Solange es eine Kante (w,w) gibt mit der Bezeichnung T(c) Begin Wenn w von einem Pattern Pi nummeriert ist, dann berichte das Vorkommen des Pattern Pi an Position l m Text T w:=w; c:=c+1; End W:=n w ; l:=c-lp(w) Bis c>m 2.Exact Set Matching - Hilfsmittel: Fehlerfunktion/ FehlerLink -

Exact String Matching II25 Was passiert?: -Suchen, bis Mismatch vorliegt: T(c) steht an keiner Kante raus aus v -wir wissen nun, dass String L(v) in T vorkommt, von Position l bis zu Position c-1 -nach Definition von v n v gilt L(n v )=T[c-lp(v).. c-1] -wenn lp(v)0, kann l auf c-lp(v) erhöht werden, c bleibt unverändert. -die nächsten Vergleiche beginnen also ab Knoten n v, der Zweig vor n v muss nicht noch einmal verglichen werden -Nächstes T(c) wird mit den von n v wegführenden Kanten-Bezeichnungen verglichen. 2.Exact Set Matching - Hilfsmittel: Fehlerfunktion/ FehlerLink -

Exact String Matching II26 -für lp(v) erhöhe l auf c und starte den nächsten Vergleich ab der Wurzel -bei Mismatch an der Wurzel, wird c:=c+1 gesetzt Funktion v n v beschleunigt die naive Suche nach Pattern aus P Laufzeit: O(m) – Analogie zu KMP mit O(m) Vergleichen 2.Exact Set Matching - Hilfsmittel: Fehlerfunktion/ FehlerLink -

Exact String Matching II27 Berechnung der Fehlerfunktion in Linearzeit: Induktive Herangehensweise: IA:für v=r (root) oder Abstand von v zu r = 1 ist gilt: nv = r IV:für ein k wurden alle n v zu allen Knoten berechnet, welche Abstand k zu r haben IS:nimm Knoten v, der Abstand k zu r hat: die Kante von v zu seinem Kind- Knoten v sei mit x bezeichnet 1.Suche nach einer von n v wegführenden Kante mit Bezeichnung x wenn gefunden, sei diese Kante (n v, w) und wir setzen n v auf w 2.Gibt es keine solche Kante aus n v heraus, dann ist L(nv) ein echtes Suffix von L(n v ), gefolgt von x. Nun sucht man weiter bei n n v (bekannt, da n v Abstand k von r hat) nach einer wegführenden Kante mit Bezeichner x… usw 2.Exact Set Matching - Hilfsmittel: Fehlerfunktion/ FehlerLink -

Exact String Matching II28 Algorithmus n v : -v ist Elternknoten von v in K -x ist Zeichen an der Kante (v,v) -w:=n v -solange keine Kante raus aus w die Bezeichnung x hat und w ungleich r ist, setze w:=n w -wenn eine Kante (w,w) wegführend von w den Bezeichner x hat, -dann: n v :=w -Sonst: n v :=r (für kompletten Baum: starte n v bei root mit n v =0) 2.Exact Set Matching - Hilfsmittel: Fehlerfunktion/ FehlerLink -

Exact String Matching II29 Aho-Corasick-Algorithmus komplett: -bisherige Einschränkung: kein Pattern Substring ist Substring eines anderen Pattern -solche Pattern könnten bei der Suche übersprungen werden 2.Exact Set Matching - Aho-Corasick komplett -

Exact String Matching II30 Lemma: Angenommen, in einem keyword-tree K gibt es einen direkten Pfad von FehlerLinks von einem Knoten v zu einem nummerierten Knoten. Dann kommt Pattern P i in T vor, endend an Position c (aktuell verglichenes Zeichen), wann immer Knoten v während einer Suchphase von Aho- Corasick erreicht wird. Lemma: Angenommen, ein Knoten v wurde während des Algorithmus erreicht. Dann kommt Pattern Pi nur in T vor (an Position c endend), wenn v eine Nummer hat oder es einen direkten Pfad von FehlerLinks zu einem nummerierten Knoten gibt. 2.Exact Set Matching - Aho-Corasick komplett -

Exact String Matching II31 Algorithmus volle AC Suche: l:=1; c:=1; w:=root; Wiederhole Solange es eine Kante (w,w) mit T(c) bezeichnet gibt Begin Wenn w von Pattern i nummeriert ist oder es gibt einen direkten Pfad von FehlerLinks von w zu einem mit i nummerierten Knoten Dann berichte Vorkommen von P i in T an Endposition c W:=w; c:=c+1 End w:=n w ; l:=c-lp(w) Bis c>n 2.Exact Set Matching - Aho-Corasick komplett -

Exact String Matching II32 Implementierungsansatz: -Wie realisiert man den direkten Pfad der Fehlerlinks? -Einführung des Zeigers OutputLink -zeigt von v aus auf den nummerierten (von v verschiedenen Knoten) der über die wenigsten FehlerLinks zu erreichen ist -Erstellung der OutputLinks während Preprocessing von n v O(n) -wurde n v ermittelt, setze OutputLink von v wie folgt: a)hat n v eine Nummer, zeigt der OutputLink von v auf n v b)hat n v keine Nummer, aber der OutputLink von n v zeigt auf w, dann setze OutputLink von v auf w c)Andernfalls hat v keinen OutputLink Korrektheit über Aufbau von n v 2.Exact Set Matching - Aho-Corasick komplett -

Exact String Matching II33 mittels dieser OutputLinks können alle k Vorkommen von Pattern aus P in T nun in O(m+k) erkannt werden Fazit/Theorem: Wenn P ein Satz von Pattern mit Gesamtlänge n ist und T ist Text der Länge m, kann man alle k Vorkommen von Pattern aus P in T mit O(n) Vorverarbeitungszeit + O(m+k) Suchzeit finden. Dies gilt auch, wenn Pattern aus P Substrings in anderen Pattern sind. 2.Exact Set Matching - Aho-Corasick komplett -

Exact String Matching II34 Exact Matching mit Wildcards: Problemstellung: -nur ein Pattern zu vergleichen -Einführen des neuen Zeichens Φ, genannt Wildcard, welches zu jedem Zeichen in T passt -Aufgabe: finde ein Pattern P mit Wildcards in T -einfachster Fall: T enthält keine Wildcards, Φ ist nur 1 Zeichen lang 3.Anwendung von Exact Set Matching - Exact Matching mit Wildcards -

Exact String Matching II35 Algorithmus: 0.C sei ein Vektor der Länge |T|, mit Nullen initialisiert 1.Sei P={P 1,P 2,...P z } die Menge der maximalen Substrings von P, die keine Wildcards enthalten l 1,l 2,...,l z seien die Startpositionen dieser Substrings in P 2.Unter Nutzung von Aho-Corasick suche zu jedem String P i von P alle möglichen Startpositionen im Text T Für jede dieser Positionen j (auf T) von P i erhöhe den Zähler der Zelle C[j-l i +1] um 1 3.Suche im Vektor C nach Zellen mit dem Wert z (Anzahl Substrings) an jeder dieser Positionen auf T startet P 3.Anwendung von Exact Set Matching - Exact Matching mit Wildcards -

Exact String Matching II36 Korrektheit: -klar: es gibt Vorkommen von P in T ab Position p gdw. für jedes i das Subpattern P i in P an Position j=p+l i +1 von T vorkommt -wird also Pattern P i in P an Position j in T gefunden, und P i startet an Position l i in P, ist das ein erster Zeuge dafür, dass P in T ab Position p-l i +1 vorkommt. -wird für jedes P i so ein Zeuge gefunden, kommt P in T ab Position -der Algorithmus zählt (in C) für jede Position p die Anzahl der Zeugen eines Auftretens von P ist die Zahl = z, wurde ein P gefunden -merke: jeder String kann die Zelle C zu p um maximal 1 erhöhen maximal k Werte pro Zelle (Eindeutigkeit) 3.Anwendung von Exact Set Matching - Exact Matching mit Wildcards -

Exact String Matching II37 Komplexität: -Keyword-Tree-Aufbau erfolgt nach Aho-Corasick in O(n) -Suche nach Pi in T erfolgt in O(m+k), k = Anzahl der Vorkommnisse von P in T -Wann immer ein Teilpattern aus P in T vorkommt, wird genau eine Zelle von C erhöht, jede Zelle kann maximal auf z erhöht werde -Also ist k begrenz durch m*z Algorithmus läuft in O(m*z) -Für ein konstantes z gilt O(m*z) = O(m) O(m) + O(n) = O(m+n) 3.Anwendung von Exact Set Matching - Exact Matching mit Wildcards -

Exact String Matching II38 Literatur: 1.Algorithms on Strings, Trees, and Sequences Dan Gusfield (Cambridge University Press, 1999) 2.Handbook of Exact String Matching Algorithms Christian Charras, Thierry Lecroq (Kings College London, 2004) Fragen? 4.Literatur / Fragen