Algorithmen und Datenstrukturen II

Ähnliche Dokumente
Gliederung. Algorithmen und Datenstrukturen II. Problem: Längste gemeinsame Teilsequenz. Problem: Längste gemeinsame Teilsequenz

Gliederung. Algorithmen und Datenstrukturen I. Binäre Bäume: ADT Heap. inäre Bäume: ADT Heap. Abstrakte Datentypen IV. D. Rösner

Algorithmen und Datenstrukturen II

Repetitive Strukturen

Text Analytics. Referat: Improving Suffix Array Locality for Fast Pattern Matching on Disk

Effiziente Algorithmen 2

Gliederung. Algorithmen und Datenstrukturen II. Java: Objektorientierung. Java: Objektorientierung. Objektorientierung in JAVA. D.

Algorithmische Bioinformatik 1

Gliederung. Algorithmen und Datenstrukturen I. Eine wichtige Frage. Algorithmus. Materialien zur Vorlesung. Begriffsbestimmung EUKLID Primzahltest

Gliederung. Algorithmen und Datenstrukturen II. ADT Graph. ADT Graph. Graphen in JAVA. Klasse Graph Suche Breitensuche Tiefensuche. D.

Zeichenketten Benedikt Straßner. Programming Systems Group Martensstr Erlangen Germany

Suchen in Texten. Naives Suchen Verfahren von Knuth-Morris-Pratt Verfahren von Boyer-Moore Ähnlichkeitssuchen Editierdistanz

Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8

Programmierparadigmen

Algorithmen und Datenstrukturen

Gliederung. Algorithmen und Datenstrukturen I. Listen in Haskell: Listen in Haskell: Listen in Haskell. Datentyp Liste Strings Listenkomprehension

String - Matching. Kapitel Definition

Algorithmen und Datenstrukturen I

Zeichenketten. Michael Fularczyk Michael Fularczyk Zeichenketten / 41

8.4 Suffixbäume. Anwendungen: Information Retrieval, Bioinformatik (Suche in Sequenzen) Veranschaulichung: DNA-Sequenzen

Kapitel 12: Induktive

Algorithmische Bioinformatik

11. Elementare Datenstrukturen

Zeichenketten. 29. April 2015 Benedikt Lorch. Benedikt Lorch Zeichenketten April

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Übersicht: Graphen. Definition: Ungerichteter Graph. Definition: Ungerichteter Graph

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

2. Woche Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung

Tutorium Algorithmen & Datenstrukturen

3. Binäre Suchbäume. 3.1 Natürliche binäre Suchbäume. EADS 3.1 Natürliche binäre Suchbäume 78/598 ľernst W. Mayr

Übung Algorithmen und Datenstrukturen

Algorithmen auf Sequenzen

Musterlösung Datenstrukturen und Algorithmen

Mehrwegbäume Motivation

Algorithmen und Datenstrukturen II. Suchen in Texten. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

Datenstrukturen und Algorithmen D-INFK

Lösungsvorschläge zur Hauptklausur 1661 Datenstrukturen I

Algorithmen und Datenstrukturen (für ET/IT)

Effiziente Algorithmen und Komplexitätstheorie

elementare Datenstrukturen

Gliederung. Funktionale Programmierung. Pattern matching in Haskell. Pattern matching in ERLANG. Materialien zur Vorlesung

Algorithmen und Datenstrukturen 2

Gliederung. Informationsextraktion Materialien zur Vorlesung. Entwicklung eines regex für Firmennamen. Entwicklung eines regex für Firmennamen

Datenstrukturen und Algorithmen SS07

Teil 1: Suchen. Problemstellung Elementare Suchverfahren Hashverfahren Binäre Suchbäume Ausgeglichene Bäume B-Bäume Digitale Suchbäume

Verkettete Datenstrukturen: Bäume

Suchen und Sortieren Sortieren. Heaps

Knuth Morris Pratt Algorithmus

Satz 172 Jedes vergleichsbasierte Sortierverfahren benötigt im worst-case mindestens n ld n + O(n) Vergleiche und hat damit Laufzeit Ω(n log n).

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Algorithmen und Datenstrukturen. Bäume. M. Herpers, Y. Jung, P. Klingebiel

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Anwendungsbeispiel MinHeap

Transkript:

Algorithmen und Datenstrukturen II Algorithmen zur Textverarbeitung III: D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2009, 15. Juni 2009, c 2009 D.Rösner D. Rösner AuD II 2009... 1

Gliederung 1 Algorithmen auf Texten Einführung Standard-Trie Komprimierter Trie Suffix-Trie D. Rösner AuD II 2009... 2

Einführung Text wird vorverarbeitet (und nicht Muster wie bei Boyer-Moore bzw. KPM) besonders sinnvoll, wenn eine Reihe von Anfragen auf einem festen Text erfolgen Trie baum-basierte Datenstruktur zum Speichern von Strings, um schnellen Musterabgleich (engl. pattern matching) zu ermöglichen hauptsächliche Anwendung: im Information Retrieval daher auch der Name: Retrieval s.a. [GT06], Ch. 12.3 D. Rösner AuD II 2009... 4

Einführung Definition: Standard- Sei S eine Menge von s Strings aus dem Alphabet Σ so dass kein String in S Präfix eines anderen String. Ein Standard-Trie für S ist ein geordneter Baum T mit folgenden Eigenschaften: Jeder Knoten von T, außer der Wurzel, ist mit einem Zeichen von Σ markiert. Die Anordnung der Kinder eines internen Knoten von T ist durch eine kanonische Anordnung des Alphabets Σ bestimmt. T hat s externe Knoten, die jeweils mit einem String aus S assoziiert, so dass die Konkatenation der Marken der Knoten auf dem Pfad von der Wurzel zu einem externen Knoten ν von T den mit ν assoziierten String ergibt. s.a. [GT06], Ch. 12.3 D. Rösner AuD II 2009... 5

Standard-Trie d j M e i a a r e g n u t n s Abbildung: Standard-Trie zu den Wörtern aus dem Satz der Mann jagt die Maus D. Rösner AuD II 2009... 6

Standard-Trie Bemerkungen: Ein Trie T repräsentiert die Strings von S durch Pfade von der Wurzel zu den externen Knoten. Die Forderung, dass kein String in S Präfix eines anderen, stellt sicher, dass jeder String eindeutig mit einem externen Knoten assoziiert. Durch Hinzufügen eines Spezialzeichens, das nicht in Σ, ans Ende jedes Strings, ist diese Bedingung immer erfüllbar. Wenn d Größe des Alphabet, dann hat jeder interne Knoten zwischen 1 und d Kinder. Jeder Pfad von Wurzel von T zu einem internen Knoten v in Tiefe i entspricht dem i-zeichen-präfix X[0... i-1] eines Strings X aus S. s.a. [GT06], Ch. 12.3 D. Rösner AuD II 2009... 7

Standard-Trie d j M e i a a r e g n u [0] [14] t n s [9] [4] [18] Abbildung: Standard-Trie zu den Wörtern aus dem Satz der Mann jagt die Maus mit Information zum Vorkommen der Wörter D. Rösner AuD II 2009... 8

Standard-Trie Implementation eines Trie als Baum mit Zeichen in seinen Knoten. weitere Struktureigenschaften eines Standard- zu einer Menge S von s Strings der Gesamtlänge n aus einem Alphabet der Größe d: Die Höhe von T ist gleich der Länge des längsten Strings in S. Die Zahl der Knoten von T ist O(n). Schlechtester Fall: keine zwei Strings teilen einen gemeinsamen nichtleeren Präfix. s.a. [GT06], Ch. 12.3 D. Rösner AuD II 2009... 9

Standard-Trie Trie T auch zum Implementieren eines Wörterbuchs, wobei die Strings in S die Schlüssel. Die Suche nach einem String X erfolgt durch zeichenweises Abgleichen von der Wurzel ausgehend. Aufwand für einen String der Länge m ist O(dm) für d = Σ Begründung: besucht werden höchstens m+1 Knoten und in jedem Knoten wird O(d) Zeit (zur Auswahl des Folgeknotens) verbraucht. Weitere Verbesserung möglich, wenn die Folgeknoten so implementiert, dass der Zugriff in O(1) oder O(logd) erfolgen kann (z.b. durch Hashtable bzw. Look-up-table) s.a. [GT06], Ch. 12.3 D. Rösner AuD II 2009... 10

Standard-Trie besonders geeignet für sog. Wortabgleich (engl. word matching), d.h. Suche nach exaktem Vorkommen eines Wort in einem Text bei Verwendung eines benötigt der Abgleich beim word matching mit einem Muster der Länge m O(dm) Zeit unabhängig von der Größe des Texts (mit d = Σ ) auch geeignet für sog. Präfix-Abgleich (engl. prefix matching): Gegeben ist ein String X und es werden alle Strings in S gesucht, die X als Präfix enthalten. das Suchen nach andersartigen Vorkommen von Mustern im Text (z.b. Suche nach Vorkommen als Suffix oder nach Vorkommen, die Wörter überspannen) können mit nicht effizient erfolgen s.a. [GT06], Ch. 12.3 D. Rösner AuD II 2009... 11

Standard-Trie Aufbau eines Standard-Trie: kann inkrementell erfolgen, d.h. Wörter werden nacheinander in Trie eingefügt wenn ein String X noch nicht im Trie wird zunächst versucht, den mit X assoziierten Pfad zu verfolgen dieser geht bei einem internen Knoten ν nicht weiter, bevor Ende von X erreicht für die verbleibenden Zeichen in X wird neue Kette von Knotennachkommen von ν kreiert Aufwand für Einfügen : O(dm) Aufwand für Aufbau des gesamten Trie zu S: O(dn) mit n Gesamtlänge der Strings in S s.a. [GT06], Ch. 12.3 D. Rösner AuD II 2009... 12

Komprimierter Trie ein komprimierter Trie unterscheidet sich von einem Standard-Trie dadurch, dass jeder interne Knoten mindestens zwei Kindknoten besitzt. Aus einem Standard-Trie wird ein komprimierter Trie gewonnen, indem Ketten aufeinanderfolgender Knoten mit nur jeweils einem Kind zu einer Kante verschmolzen werden. s.a. [GT06], Ch. 12.3.2 D. Rösner AuD II 2009... 13

Komprimierter Trie d jagt Ma er ie nn us Abbildung: Komprimierter Trie zu den Wörtern aus dem Satz der Mann jagt die Maus D. Rösner AuD II 2009... 14

Komprimierter Trie Definitionen: Sei T ein Standard-Trie. Ein vom Wurzelknoten verschiedener interner Knoten ν heisst redundant, wenn ν nur ein Kind hat. Eine Kette von k 2 Kanten, (ν 0, ν 1 )(ν 1, ν 2 )...(ν k 1, ν k ), ist redundant wenn: ν i ist redundant für i = 1,..., k-1. ν 0 und ν k sind nicht redundant. s.a. [GT06], Ch. 12.3.2 D. Rösner AuD II 2009... 15

Komprimierter Trie Ein Standard-Trie T kann in einen komprimierten Trie umgewandelt werden, indem jede redundante Kette (ν 0,ν 1 )(ν 1,ν 2 )... (ν k 1,ν k ) von k 2 Kanten ersetzt wird durch eine einzige Kante (ν 0,ν k ), wobei ν k als Label den durch die Konkatenation der Zeichen aus den Knoten ν 1,...,ν k entstehenden String erhält. s.a. [GT06], Ch. 12.3.2 D. Rösner AuD II 2009... 16

Komprimierter Trie Ein komprimierter Trie, der eine Kollektion S von s Strings aus einem Alphabet der Grösse d speichert, hat folgende Eigenschaften: Jeder interne Knoten hat mindestens zwei und höchstens d Kinder. T hat s externe Knoten. Die Zahl der Knoten von T ist O(s). Bemerkung: Zahl der Knoten von T also nur noch von der Zahl s unterschiedlicher Strings, aber nicht mehr von ihrer Gesamtlänge n (wie bei Standard-Trie) abhängig. s.a. [GT06], Ch. 12.3.2, Prop. 12.7 D. Rösner AuD II 2009... 17

Suffix-Trie ein sog. Suffix-Trie liegt vor, wenn es sich bei den String in der Kollektion S um alle Suffixe eines Strings X handelt man spricht dann auch von Suffix-Baum (engl. suffix tree) oder Positionsbaum (engl. position tree) s.a. [GT06], Ch. 12.3.3 D. Rösner AuD II 2009... 18

Suffix-Trie e i mi nimize ze mize nimize ze nimize ze Abbildung: Suffix-Trie zum String minimize ; vgl. [GT06], Fig. 12.10 (a) D. Rösner AuD II 2009... 19

Suffix-Trie 7,7 1,1 0,1 2,7 6,7 4,7 2,7 6,7 2,7 6,7 Abbildung: Kompakte Version des Suffix-Trie zum String minimize ; Paar i,j verweist auf Substring X[i..j]; vgl. [GT06], Fig. 12.10 (b) D. Rösner AuD II 2009... 20

Suffix-Trie Musterabgleich mit einem Suffix-Trie Pseudocode: Algorithm suffixtriematch (T,P) Input: Kompakter Suffix-Trie T für einen Text X und Muster P Output: Index des Anfangs des ersten Teilstrings von X, der mit P übereinstimmt, oder Info, dass P nicht in X enthalten p P.length() {Länge des Pattern} j 0 {Start des Pattern-Suffix} ν T.root() repeat f true {kein Kind erfolgreich bearbeitet} for each child w of ν do... s. nächste Seite until f or T.isExternal(ν) return P kein Teilstring von X s.a. [GT06], Ch. 12.3.3 D. Rösner AuD II 2009... 21

Suffix-Trie Pseudocode (cont.): for each child w of ν do i start(ν) if (P[j] = T[i]) then x end(w)-i+1 if p x then if (P[j..j+p-1] = X[i..i+p-1]) then return i - j {match } else return P kein Teilstring von X else if (P[j..j+x-1] = X[i..i+x-1]) then p p - x {Länge des verbleibenden Pattern} j j + x {neuer Start des Pattern-Suffix} ν w f false s.a. [GT06], Ch. 12.3.3 break out of the for loop D. Rösner AuD II 2009... 22

Suffix-Trie wichtige Anwendung von Suffix-: in Web-Suchmaschinen s.a. [GT06], Ch. 12.3.4 D. Rösner AuD II 2009... 23

Literatur: I Michael T. Goodrich and Roberto Tamassia. Data Structures and Algorithms in Java. John Wiley & Sons, New York, 2006. ISBN-10 0-471-73884-0; ISBN-13 978-0-471-73884-8;4th edition. D. Rösner AuD II 2009... 24