Suche in Texten (Stringsuche )

Slides:



Advertisements
Ähnliche Präsentationen
Grundlagen des A*-Algorithmus und Anwendung in der Routenplanung
Advertisements

Informatik II: Algorithmen und Datenstrukturen SS 2013
Shift-And und Karp-Rabin
Das LCA – Problem in Suffixbäumen
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten KMP, BM.
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
Kapitel 6: Klassifizierung von Sortiertechniken
7. Natürliche Binärbäume
7. Automaten Ein Automat ist ein Sechstupel A= (I, O, Q, , q0, F).
10. Kapitel: Syntaxanalyse (Parsing)
3. Kapitel: Komplexität und Komplexitätsklassen
Kapitel 6. Suchverfahren
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
5. Sortier-Algorithmen Vorbemerkungen:
2. Kapitel: Komplexität und Komplexitätsklassen
Synonyme: Stapel, Keller, LIFO-Liste usw.
3. Berechenbarkeit Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar? Intuitiv: Wenn es einen Algorithmus gibt, der sie berechnet! Was heißt,
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Bestimmung des Next-Arrays im KMP-Algorithmus
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (02 – Endliche Automaten) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (04 – Automaten mit ε-Transitionen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen 09 - Weitere Sortierverfahren Heapsort-Nachtrag Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (17 –Turingmaschinen) Prof. Dr. Th. Ottmann.
High Performance = Innovative Computer Systems + Efficient Algorithms Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen.
Hauptseminar Automaten und Formale Sprachen
Exact String Matching II1 Exact String Matching: A Deeper Look at Classical Methods Erweiterte Anwendungen zu Boyer-Moore und Knuth-Morris-Pratt Hauptseminar.
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Vortrag zum Thema Brute - Force Algorithmus Vortragende
Mustersuche in Zeichenfolgen
Effiziente Algorithmen
Kapitel 7: Ausgewählte Algorithmen 7.1 Externes Suchen
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Effiziente Algorithmen
Flüsse, Schnitte, bipartite Graphen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Effiziente Algorithmen
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
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
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.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Mehrkriterielle Optimierung mit Metaheuristiken
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmiersprache C 4
Christian Mansky Design - Fallstudien Christian Mansky
Algorithm Engineering „Zeichenkettensuche“
Suchen In Texten Von Adriano Feola & Marc Draschl.
Automaten, formale Sprachen und Berechenbarkeit II SoSe 2004 Prof. W. Brauer Teil 1: Wiederholung (Vor allem Folien von Priv.-Doz. Dr. Kindler vom WS 2001/02.
PHP: Operatoren und Kontrollstrukturen
Komplexität von Algorithmen
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Anfang Präsentation 3. November, 2004 Tarjan’s Schleifenaufbrechalgorithmus In dieser Vorlesung wird ein Verfahren vorgestellt, welches in der Lage ist,
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Binärbäume.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 3 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Suchen und Sortieren.
 Präsentation transkript:

Suche in Texten (Stringsuche ) Gegeben: Text T[1..n]; Pattern P[1..m] Gesucht: Stelle, an der Pattern im Text vorkommt. P kommt in T mit shift s vor, wenn gilt: T[s+1,...,s+m] = P[1,...,m] Naiver Algorithmus: #define TRUE 1 #define FALSE 0 for (s = 0 ; s = n-m ; s++) if (stringtest(s)) return (s) /* s ist gesuchter shift */ stringtest (int s) { int j , test; test = TRUE; for (j= 1 ; j= m; j++) if (P[j] != T[s+j]) test = FALSE; return (test); } Komplexität: O((n-m+1) * m) = O(n * m)

Problem:. (1) Verringerung Fehlstarts Problem: (1) Verringerung Fehlstarts (2) effiziente Behandlung von Wiederholungen Lösungsansatz (1): String Matching mit endlichen Automaten Ein endlicher Automat besteht aus: Alphabet S Menge von Zuständen Z Anfangszustand z0 Endzustand ze Überführungsfunktion d: Z x S-> Z, ordnet jedem Zustand Nachfolgezustand nach Lesen eines Symbols zu. hier: Automat mit Zuständen {0,...,m}, z0 = 0, ze = m; Zustand j bedeutet: Anfangsstück des Patterns der Länge j wurde gelesen.

Definition: d: d(j,a) = max{k  i | P[1..k] ist Endstück von P[1..i]a, falls Maximum existiert 0 sonst Beispiel: S = {a,o,k}, P = kakao Z = {0,1,2,3,4,5} Folgender Automat erkennt L = S*kakao

Algorithmus: Konstruiere den P entsprechenden Automaten; z = 0; for (i = 1 ; i = n ; i++ ) { z = d(z, T[i]) ; if (z == m) Ausgabe ( i - m ) ; } Man kann zeigen: Algorithmus ist O(|S|m + n) erster Summand Erzeugung des Automaten. Es existieren noch effizientere Verfahren.

Knuth-Morris-Pratt Algorithmus Statt endlichem Automaten (mit |S| * (m+1) Einträgen) wird eindimensionale "Verschiebe"-Tabelle mit m Einträgen verwendet. Verschiebetabelle P [1 .. m] gibt an, wie weit gesuchtes Pattern beim Vergleich im Falle eines mismatches verschoben werden kann (Endstück könnte Anfang des gesuchten Patterns sein): P [q] = max{ k < q | P[1 .. k] = P [q-k+1 .. q ] } P [q ]=j bedeutet: die letzten j Positionen sind möglicherweise richtig Pattern kann bei mismatch jeweils um q -P [q] Positionen nach rechts verschoben werden. (P [q] te Position im Pattern wird an aktuelle Position geschoben)

Beispiel q: 1 2 3 4 5 P: k a k a o P: 0 0 1 2 0 Beispiel: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 k a k a a k a k a k a o k a k a k a o mismatch 5, schiebe 2 k a k a o mismatch 5, schiebe 2 k a k a o mismatch 5, schiebe 1 k a k a o mismatch 10,schiebe 2 k a k a o match 12,verschiebe 5 k a k a o

Bemerkung zur Komplexität: In jedem Schritt wird entweder die aktuelle Position oder das Pattern nach rechts verschoben. Das kann insgesamt höchstens 2n mal passieren, damit ist der Algorithmus O(n).

Algorithmus: Berechne Verschiebetabelle P [1..m] ; q = 0 ; for (i = 1; i = n; i++) { while ((q > 0) && (P [q+1]!=T[i] ) ) q = P [q]; if (P[q+1] == T[i] ) q = q+1; if (q == m) printf („%d“, i-m) ; q = P [q] ; } i : aktuelle Textposition q: Anzahl übereinstimmender Zeichen m : Patternlänge n: Textlänge

Beispiel: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 k a k a a k a k a k a o k a k a k a o nach for-Schleife mit i = ist q = 1 1 2 2 3 3 4 4 5 2, 0 6 1 7 2 8 3 9 4 10 2, 3 11 4 12 5, 0 Ausgabe s = 7 13 1 14 2

Komplexität: W- in F-Schleife, sieht aus nach O(nm), ist aber besser: Mehrfachausführung der while-Schleife selten. Grund: Wert von q geht in jeder F-Schleife entweder in 1-er-Schritt hoch, oder in while-Schleife runter (auf 0 oder auf Zwischenwert + 1, siehe 10). In jedem Fall geht jedem Durchlauf der W-Schleife mindestens ein Durchlauf der F-Schleife voraus, in dem q um 1 erhöht wurde. Damit ist Anzahl von F+W-Schleifendurchläufen durch 2n beschränkt.

Aufbau Verschiebetabelle: P[1] = 0 ; k = 0 ; for (q = 2 ; q= m ; q++) { while (( k > 0) && (P[k+1]!= P[q]) ) k = P [k]; if (P[k+1] == P[q] ) k = k+1; P[q] = k ; } Beispiel: k a k a o nach for-Schleife mit q = ist PI[q] = 2 0 3 1 4 2 5 0 Ähnliches Argument wie oben zeigt, daß Schrittzahl mit 2m abgeschätzt werden kann. Damit Komplexität KMP-Algorithmus insgesamt O(m+n).

Boyer-Moore Algorithmus Erweist sich in Praxis als schnellster Algorithmus. Idee: Pattern wird am Text "langgeschoben". Diesmal wird Übereinstimmung vom rechten zum linken Patternrand überprüft. Mismatches führen zu Verschiebungen des Patterns nach rechts. Mögliche Verschiebungen werden anhand von 2 Strategien ermittelt: 1) bad character Strategie: Sei i der Character, der beim Vergleich von rechts nach links mismatch bewirkt hat. Suche das im Pattern am weitesten rechts vorkommende i und verschiebe Pattern so weit nach rechts, bis dieses i und der bad character zur Deckung kommen.

2) good suffix Strategie: Suche das im Pattern am weitesten rechts vorkommende rechte Teilstück des Patterns, das bis zu mismatch mit dem Text matchte. Bringe dieses Teilstück mit dem Text in Deckung. BM-Algorithmus bestimmt den nach beiden Strategien erlaubten größten Sprung und wendet ihn an. Dazu werden wieder 2 Verschiebetabellen verwendet. BM im Mittel sehr schnell. Worst case aber O(mn). Tritt ein, wenn T = an und P = am.