WS 2006-07 Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten KMP, BM.

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmentheorie 08 – Dynamische Programmierung (1)
Advertisements

Algorithmentheorie 08 – Dynamische Programmierung (4) Editierdistanz Approximative Zeichenkettensuche Sequence Alignment Prof. Dr. Th. Ottmann WS
Randomisierte Algorithmen Präfix Suche und Konsistentes Hashing
Informatik II: Algorithmen und Datenstrukturen SS 2013
Prof. Dr. S. Albers Prof.Dr.Th Ottmann
Einführung in die Informatik: Programmierung und Software-Entwicklung
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Suche in Texten (Stringsuche )
Übung 6.6Schranken 1.Angenommen, Ihr Algorithmus habe einen Aufwand von g(n) = 5n 3 + n für alle n a)Geben sie eine obere Schranke O(g(n)) an. b)Beweisen.
Scratch Der Einstieg in das Programmieren. Scatch: Entwicklungsumgebung Prof. Dr. Haftendorn, Leuphana Universität Lüneburg,
Klicke Dich mit der linken Maustaste durch das Übungsprogramm! Vereinfachung von Termen Ein Übungsprogramm der IGS - Hamm/Sieg © IGS-Hamm/Sieg 2006 Dietmar.
Algorithmentheorie 04 –Hashing
Suche in Texten: Suffix-Bäume
Algorithmentheorie 6 – Greedy-Verfahren
WS Algorithmentheorie 13 - Kürzeste (billigste) Wege Prof. Dr. Th. Ottmann.
Prof.Dr.S. Albers Prof. Dr. Th. Ottmann
WS 03/04 Algorithmentheorie 03 - Randomisierung Prof. Dr. S. Albers Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 02 - Polynomprodukt und Fast Fourier Transformation Prof. Dr. Th. Ottmann.
1WS 06/07 Organisatorisches 1.Vorlesung am Montag, : 9-11 Uhr in Gebäude 106, Raum Podcasts: Probleme mit der Videoqualität sind behoben.
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
Dynamische Programmierung (2) Matrixkettenprodukt
Algorithmentheorie 02 – Polynomprodukt und Fast Fourier Transformation
Prof. Dr. S. Albers Prof. Dr. Th. Ottmann
Konstruktion von Suffix Bäumen
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
WS Algorithmentheorie 01 – Divide and Conquer (Segmentschnitt) Prof. Dr. Th. Ottmann.
Prof. Dr. S. Albers Prof. Dr. Th. Ottmann
Bestimmung des Next-Arrays im KMP-Algorithmus
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
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.
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten Suffix –Tree –Konstruktion Ukkonen Algorithmus.
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmentheorie 12 – Spannende Bäume minimalen Gewichts
Algorithmentheorie 7 – Bin Packing
Union-Find-Strukturen
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten Suffix - Bäume.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (17 –Turingmaschinen) Prof. Dr. Th. Ottmann.
Geometrisches Divide and Conquer
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Wir suchen ‘ mit m = m    ‘ c  ‘ mod 26
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.
Vortrag zum Thema Brute - Force Algorithmus Vortragende
Mustersuche in Zeichenfolgen
Bild 1.1 Copyright © Alfred Mertins | Signaltheorie, 2. Auflage Vieweg+Teubner PLUS Zusatzmaterialien Vieweg+Teubner Verlag | Wiesbaden.
20:00.
Kapitel 7: Ausgewählte Algorithmen 7.1 Externes Suchen
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Auslegung eines Vorschubantriebes
Christian Mansky Design - Fallstudien Christian Mansky
Algorithm Engineering „Zeichenkettensuche“
Suchen In Texten Von Adriano Feola & Marc Draschl.
Vorlesung Mai 2000 Konstruktion des Voronoi-Diagramms II
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Analyseprodukte numerischer Modelle
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Vortrag von Rechtsanwältin Verena Nedden, Fachanwältin für Steuerrecht zur Veranstaltung Wege zum bedingungslosen Grundeinkommen der Piratenpartei Rhein-Hessen.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation III Vorlesung 1 WS 2001/02 Punkt-in-Landkarte I (Streifenkarte)
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
 Präsentation transkript:

WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten KMP, BM

2WS Suche in Texten Verschiedene Szenarios: Dynamische Texte Texteditoren Symbolmanipulatoren Statische Texte Literaturdatenbanken Bibliothekssysteme Gen-Datenbanken WWW-Verzeichnisse

3WS Suche in Texten Datentyp string: array of character file of character list of character Operationen: (seien T, P von Typ string) Länge: length () i-tes Zeichen : T [i] Verkettung: cat (T, P) T.P

4WS Problemdefinition Gegeben: Text t 1 t t n n Muster p 1 p 2... p m m Gesucht: Ein oder alle Vorkommen des Musters im Text, d.h. Verschiebungen i mit 0 i n – m und p 1 = t i+1 p 2 = t i+2 p m = t i+m...

5WS Problemdefinition Text: t 1 t t i t i+m ….. t n Muster: p p m Aufwandsabschätzung (Zeit) : 1.# mögl. Verschiebungen: n – m + 1# Musterstellen: m O(n m) 2. mind. 1 Vergleich pro m aufeinander folgende Textstellen: ( m + n/m ) i i+1 i+m

6WS Naives Verfahren Für jede mögliche Verschiebung 0 i n – m prüfe maximal m Zeichenpaare. Bei Mismatch beginne mit neuer Verschiebung. textsearchbf := proc (T : : string, P : : string) # Input: Text T und Muster P # Output: Liste L mit Verschiebungen i, an denen P in T vorkommt n := length (T); m := length (P); L := []; for i from 0 to n-m do j := 1; while j m and T[i+j] = P[j] do j := j+1 od; if j = m+1 then L := [L [], i] fi; od; RETURN (L) end;

7WS Naives Verfahren Aufwandsabschätzung (Zeit): Worst Case: ( m n ) In der Praxis tritt Mismatch oft sehr früh auf. Laufzeit ~ c n i

8WS Verfahren nach Knuth-Morris-Pratt (KMP) Seien t i und p j+1 die zu vergleichenden Zeichen: t 1 t t i = = = = p 1... p j p j+1... p m Tritt bei einer Verschiebung erstmals ein Mismatch auf bei t i und p j+1 dann gilt: Die zuletzt verglichenen j Zeichen in T stimmen mit den ersten j Zeichen in P überein. t i p j+1

9WS Verfahren nach Knuth-Morris-Pratt (KMP) Idee: Bestimme j´ = next[j] < j, so dass t i anschliessend mit p j´+1 verglichen werden kann. Bestimme größtes j´< j, so dass P 1...j´ = P j-j´+1...j. Bestimme das längste Präfix von P, das echtes Suffix von P 1... j ist. t 1 t t i = = = = p 1... p j p j+1... p m

10WS Verfahren nach Knuth-Morris-Pratt (KMP) Beispiel für die Bestimmung von next[j]: t 1 t next[j] = Länge des längsten Präfix von P, das echtes Suffix von P 1...j ist.

11WS Verfahren nach Knuth-Morris-Pratt (KMP) für P = ist next = [0,0,1,2,0,1,2,3,4,5] :

12WS Verfahren nach Knuth-Morris-Pratt (KMP) KMP := proc (T : : string, P : : string) # Input: Text T und Muster P # Output: Liste L mit Verschiebungen i, an denen P in T vorkommt n := length (T); m := length(P); L := []; next := KMPnext(P); j := 0; for i from 1 to n do while j>0 and T[i] <> P[j+1] do j := next [j] od; if T[i] = P[j+1] then j := j+1 fi; if j = m then L := [L[], i-m] ; j := next [j] fi; od; RETURN (L); end;

13WS Verfahren nach Knuth-Morris-Pratt (KMP) Muster: abrakadabra, next = [0,0,0,1,0,1,0,1,2,3,4] a b r a k a d a b r a b r a b a b r a k... | | | | | | | | | | | a b r a k a d a b r a next[11] = 4 a b r a k a d a b r a b r a b a b r a k | a b r a k next[4] = 1

14WS Verfahren nach Knuth-Morris-Pratt (KMP) a b r a k a d a b r a b r a b a b r a k... - | | | | a b r a k next [4] = 1 a b r a k a d a b r a b r a b a b r a k... - | | a b r a k next [2] = 0 a b r a k a d a b r a b r a b a b r a k... | | | | | a b r a k

15WS Verfahren nach Knuth-Morris-Pratt (KMP) Korrektheit: Situation am Beginn der for-Schleife: P 1...j = T i-j...i-1 und j m falls j = 0: man steht auf erstem Zeichen vom P falls j 0: P kann verschoben werden, solange j>0 und t i p j+1 t 1 t t i p 1... p j p j+1... p m = = = =

16WS Verfahren nach Knuth-Morris-Pratt (KMP) Ist dann T[i] = P[j+1], können j und i (am Schleifenende) erhöht werden. Wurde ganz P verglichen ( j = m ), ist eine Stelle gefunden, und es kann verschoben werden.

17WS Verfahren nach Knuth-Morris-Pratt (KMP) Laufzeit: Textzeiger i wird nie zurückgesetzt Textzeiger i und Musterzeiger j werden stets gemeinsam inkrementiert Es ist next[j] < j; j kann nur so oft herabgesetzt werden, wie es heraufgesetzt wurde. Der KMP-Algorithmus kann in Zeit O(n) ausgeführt werden, wenn das next-Array bekannt ist.

18WS Berechnung des next-Arrays next[i] = Länge des längsten Präfix von P, das echtes Suffix von P 1... i ist. next[1] = 0 Sei next[ i-1] = j: p 1 p p i p 1... p j p j+1... p m = = = =

19WS Berechnung des next-Arrays Betrachte zwei Fälle: 1) p i = p j+1 next[i] = j + 1 2) p i p j+1 ersetze j durch next[ j ], bis p i = p j+1 oder j = 0. Falls p i = p j+1 ist, dann next[i] = j + 1 sonst next[i] = 0.

20WS Berechnung des next-Arrays KMPnext := proc (P : : string) #Input : Muster P #Output : next-Array für P m := length (P); next := array (1..m); next [1] := 0; j := 0; for i from 2 to m do while j > 0 and P[i] <> P[j+1] do j := next [j] od; if P[i] = P[j+1] then j := j+1 fi; next [i] := j od; RETURN (next); end;

21WS Laufzeit von KMP Der KMP-Algorithmus kann in Zeit O(n + m) ausgeführt werden. Kann die Textsuche noch schneller sein?

22WS Verfahren nach Boyer-Moore (BM) Idee: Das Muster von links nach rechts anlegen, aber zeichenweise von rechts nach links vergleichen Beispiel: e r s a g t e a b r a k a d a b r a a b e r | a b e r e r s a g t e a b r a k a d a b r a a b e r | a b e r

23WS Verfahren nach Boyer-Moore (BM) e r s a g t e a b r a k a d a b r a a b e r | a b e r e r s a g t e a b r a k a d a b r a a b e r | a b e r e r s a g t e a b r a k a d a b r a a b e r | a b e r

24WS Verfahren nach Boyer-Moore (BM) e r s a g t e a b r a k a d a b r a a b e r | a b e r e r s a g t e a b r a k a d a b r a a b e r | a b e r e r s a g t e a b r a k a d a b r a a b e r | | | | a b e r Große Sprünge: wenig Vergleiche Erhoffte Laufzeit: O(m + n /m)

25WS BM – Die Vorkommensheuristik Für c und das Muster P sei (c) := Index des von rechts her ersten Vorkommens von c in P = max {j | p j = c} = Wie teuer ist die Berechnung aller -Werte? Sei | | = l :

26WS BM – Die Vorkommensheuristik Seien c = das den Mismatch verursachende Zeichen j = Index des aktuellen Zeichens im Muster (c p j )

27WS BM – Die Vorkommensheuristik Berechnung der Musterverschiebung Fall 1 c kommt nicht im Muster P vor. ( (c) = 0) Verschiebe das Muster um j Positionen nach rechts Text c Muster i + 1 i + j i + m pjpj | | | p m

28WS BM – Die Vorkommensheuristik Fall 2 c kommt im Muster vor. ( (c) 0) Verschiebe das Muster soweit nach rechts, dass das rechteste c im Muster über einem potentiellen c im Text liegt. Text Muster i + 1 i + j i + m c p j | | | c k c pmpm j - k

29WS BM – Die Vorkommensheuristik Fall 2 a: (c) > j Text Muster Verschiebung des rechtesten c im Muster auf ein potentielles c im Text. c p j c kein c

30WS BM – Die Vorkommensheuristik Fall 2 b: (c) < j Text Muster Verschiebung des rechtesten c im Muster auf c im Text: c cpjpj

31WS BM-Algorithmus (1.Version) Algorithmus BM-search1 Input: Text T und Pattern P Output: Verschiebungen für alle Vorkommen von P in T 1 n := length(T); m := length(P) 2 berechne 3 i := 0 4 while i n – m do 5 j := m 6 while j > 0 and P[j] = T[i + j] do 7 j := j – 1 end while;

32WS BM-Algorithmus (1.Version) 8 if j = 0 9 then gebe Verschiebung i aus 10 i := i else if (T[i + j]) > j 12 then i := i + m [T[i + j]] 13 else i := i + j - [T[i + j]] 14 end while;

33WS BM-Algorithmus (1.Version) Laufzeitanalyse: gewünschte Laufzeit : O(m + n/m) worst-case Laufzeit: (n m) i

34WS Match-Heuristik Nutze die bis zum Auftreten eines Mismatches p j t i + j gesammelte Information wrw [ j ] = Position, an der das von rechts her nächste Vorkommen des Suffixes P j+1... m endet, dem nicht das Zeichen P j vorangeht. Mögliche Verschiebung: [j] = m – wrw [ j ] p 1... p j... p m i t 1 t 2... t i+1... t i+j... t i+m = = =

35WS Beispiel für die wrw -Berechnung wrw [ j ] = Position, an der das von rechts her nächste Vorkommen des Suffix P j m endet, dem nicht das Zeichen P j vorangeht. Muster: banana wrw[j] betracht. Suffix verb. Zeichen weit. Auft.Pos. wrw[5]an banana2 wrw[4]naa*** bana na0 wrw[3]anan banana4 wrw[2]nanaa banana0 wrw[1]ananab banana0 wrw[0]banana banana0

36WS Beispiel für die wrw -Berechnung wrw (banana) = [0,0,0,4,0,2] a b a a b a b a n a n a n a n a = = = b a n a n a

37WS BM-Algorithmus (2.Version) Algorithmus BM-search2 Input: Text T und Pattern P Output: Verschiebung für alle Vorkommen von P in T 1 n := length(T); m := length(P) 2 berechne und 3 i := 0 4 while i n – m do 5 j := m 6 while j > 0 and P[j] = T[i + j] do 7 j := j – 1 end while;

38WS BM-Algorithmus (2.Version) 8 if j = 0 9 then gebe Verschiebung i aus 10 i := i + [0] 11 else i := i + max( [j], j - [T[i + j]]) 12 end while;