Zeichenketten. Michael Fularczyk Michael Fularczyk Zeichenketten / 41

Ähnliche Dokumente
Hallo Welt für Fortgeschrittene

Mathematisches Praktikum - SoSe 2015

Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Sommersemester Dr. Tobias Lasser

Praktikum Algorithmische Anwendungen WS 2006/07 Ausarbeitung: Schnelle Stringsuchalgorithmen Boyer-Moore und Knuth-Morris-Pratt

Algorithmen zur exakten Suche in Texten

String-Matching-Algorithmen. von. Thomas Kramer

Zeichenketten. Hauptseminar Hallo Welt! für Fortgeschrittene. SS Mai 2006 Tobias Hager.

Algorithmen und Datenstrukturen 2

Einführung in die Informatik 2

Projektdokumentation String-Searching KMP-Algorithmus Boyer-Moore-Algorithmus

Indexieren und Suchen

4.9.7 Konstruktion der Suffixbäume

5. Mustererkennung. Anwendungsbeispiele: suche Zeichenfolge in Text suche Bitmuster in Pixelbild. gegeben: endliches Alphabet Σ. Muster p Σ m, m IN

Es sei a 2 und b 2a 1. Definition Ein (a, b)-baum ist ein Baum mit folgenden Eigenschaften:

Proseminar "Pattern Matching"

Exakte Suche nach einem Wort

Grundlagen der Programmierung

Klausur Informatik B April Teil I: Informatik 3

7. Sortieren Lernziele. 7. Sortieren

Informatik II, SS 2014

Dynamisches Huffman-Verfahren

Strings. Stringsuche, Boyer-Moore, Textkompression, Huffman Codes.

Repräsentation von Daten Binärcodierung von rationalen Zahlen und Zeichen

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Bäume, Suchbäume und Hash-Tabellen

Algorithmen & Datenstrukturen 1. Klausur

Tutorium Algorithmen & Datenstrukturen

Kapitel 2. Suche nach endlich vielen Wörtern. R. Stiebe: Textalgorithmen, Winter 2005/06 113

Java Einführung Objekt-Datentypen und Strings. Kapitel 8 und 9

Einführung in die Programmiertechnik

Vorlesung 4 BETWEENNESS CENTRALITY

7. Übung zur Vorlesung Grundlagen der Informatik

4. Hashverfahren. geg.: Wertebereich D, Schlüsselmenge S = {s 1,..., s n } D. Menge A von Speicheradressen; oft: A = {0,..., m 1}

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Algorithmen und Datenstrukturen VO 3.0 Vorlesungsprüfung 19. Oktober 2007

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

Zusammenfassung des Handzettels für Programmieren in C

Motivation und Überblick

13 (2-4)-Bäume Implementierbare Funktionen. (2-4)-Bäume sind durch folgende Eigenschaften deniert: 1. Alle Äste sind gleich lang

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Willkommen zur Vorlesung. Algorithmen und Datenstrukturen

Einführung in die Programmierung Wintersemester 2008/09

Einstieg in die Informatik mit Java

4.4.2 Virtuelles Hashing Erweiterbares Hashing Das Gridfile Implementation von Hashverfahren in Java

Einstieg in die Informatik mit Java

Grundlagen der Datenverarbeitung

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Java Kurs für Anfänger Einheit 2 Datentypen und Operationen

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

Suchen und Sortieren Sortieren. Heaps

Grundlagen der Informatik

Elementare Datentypen in C++

Informatik II, SS 2014

Herzlich Willkommen zur Informatik I. Bits und Bytes. Zahlensystem zur Basis 10 (Dezimalzahlen) Warum Zahlensysteme betrachten?

Kapitel 5: Dynamisches Programmieren Gliederung

Kapitel 5: Dynamisches Programmieren Gliederung

GI Vektoren

Algorithmische Bioinformatik

Seminar über Algorithmen, SS2004. Textkompression. von Christian Grümme und Robert Hartmann

Einführung in die Kryptographie ,

Quadtrees. Christian Höner zu Siederdissen

Technische Universität Wien Institut für Computergraphik und Algorithmen Abteilung für Algorithmen und Datenstrukturen

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Kodierungsalgorithmen

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

12 (2-4)-Bäume Implementierbare Funktionen. (2-4)-Bäume sind durch folgende Eigenschaften deniert: 1. Alle Äste sind gleich lang

Programmiertechnik II

Sortierverfahren für Felder (Listen)

Übungen zur Vorlesung Systemsicherheit

Übrigens: um den Algorithmus im Unterricht einzuführen, sind keine Formeln notwendig! Warum reicht die normale ASCII-Codierung nicht aus?

Priority Queues and Heapsort

Praktikum zur Vorlesung Einführung in die Programmierung WS 14/15 Blatt 3

Objektorientierte Programmierung. Kapitel 10: Strings

Codes und Informationsgehalt

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 8. Zufallszahlen Generatoren Anwendungen

Definition Suffixbaum

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Kapitel 3: Variablen

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Arrays (Felder/Vektoren)

Inhaltsverzeichnis. Einführende Bemerkungen 11. Das Fach Informatik 11 Zielsetzung der Vorlesung Grundbegriffe

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Zahlensysteme und Datendarstellung

Praktikum Algorithmen-Entwurf (Teil 7)

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Gliederung. Was ist der Unicode? Warum gibt es den Unicode? Wie funktioniert er? Wo ist mein Schriftzeichen? Kritische Stimmen

2.5 Primitive Datentypen

5.8.2 Erweiterungen Dynamische Hash-Funktionen (mit variabler Tabellengröße)?

Ein erstes Java-Programm

2 Lösungen "Peptide de novo Sequencing"

Übungsblatt 3: Algorithmen in Java & Grammatiken

Elementare Konzepte von

Digitaltechnik I WS 2006/2007. Klaus Kasper

Netzsicherheit I, WS 2008/2009 Übung 6. Prof. Dr. Jörg Schwenk

Algorithmen und Datenstrukturen VO UE 2.0 Nebentermin Vorlesungsprüfung / 4. Übungstest SS

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Ausdrücke und primitive Typen

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

Informatik II Vorlesung am D-BAUG der ETH Zürich

Transkript:

Zeichenketten Michael Fularczyk 17.05.2011 Michael Fularczyk Zeichenketten 17.05.2011 1 / 41

Inhalt Zeichenketten Zeichensätze Darstellung Suchverfahren naive Stringsuche Knuth-Morris-Pratt Boyer-Moore Rabin-Karp Manacher Tries Bibliotheksfunktionen Michael Fularczyk Zeichenketten 17.05.2011 2 / 41

Zeichenketten Zeichenketten Michael Fularczyk Zeichenketten 17.05.2011 3 / 41

ASCII American Standard Code for Information Interchange 1 Zeichen == 1 Byte (msb ungenutzt) 128 Zeichen. Problem: Siehe Name (American Standard) Lösung: Viel Gefrickel (ISO-8859-X, Windows 1252,...) ASCII Tabelle: man ascii jfgi... Michael Fularczyk Zeichenketten 17.05.2011 4 / 41

UTF-8/16/32 UTF-8: 1-4 Byte pro Zeichen UTF-16: 2 4 Byte pro Zeichen UTF-32: 4 Byte pro Zeichen In C/C++ wchar t Michael Fularczyk Zeichenketten 17.05.2011 5 / 41

Darstellung length get(n) add(n,c), del(n) Array \0 -terminiert O(n) O(1) O(n) Array mit Länge O(1) O(1) O(n) Linked List O(n) O(n) O(1) Michael Fularczyk Zeichenketten 17.05.2011 6 / 41

Suchverfahren Suchverfahren Michael Fularczyk Zeichenketten 17.05.2011 7 / 41

Naive Suche f o r i = 0 to t e x t { gefunden = t r u e ; f o r j = 0 to p a t t e r n { i f t e x t [ i ] == p a t t e r n [ j ] c o n t i n u e gefunden = f a l s e break } i f! gefunden c o n t i n u e r e t u r n t r u e } Michael Fularczyk Zeichenketten 17.05.2011 8 / 41

Naive Suche f o r i = 0 to t e x t { gefunden = t r u e ; f o r j = 0 to p a t t e r n { i f t e x t [ i ] == p a t t e r n [ j ] c o n t i n u e gefunden = f a l s e break } i f! gefunden c o n t i n u e r e t u r n t r u e } Aufwand: O( String Muster ) Michael Fularczyk Zeichenketten 17.05.2011 8 / 41

Knuth-Morris-Pratt Schiebt das Pattern bei Mismatch Somit muss nicht jedes Zeichen vom String mit dem Pattern verglichen werden. Michael Fularczyk Zeichenketten 17.05.2011 9 / 41

Knuth-Morris-Pratt - Suche 1 1 Quelle: www.wi.uni-muenster.de/pi/lehre/ss08/info2/folien/info2k5.pdf Michael Fularczyk Zeichenketten 17.05.2011 10 / 41

Knuth-Morris-Pratt - Suche Suchvorgang: a b c a b c a b d a a b c a b d Michael Fularczyk Zeichenketten 17.05.2011 11 / 41

Knuth-Morris-Pratt - Suche Suchvorgang: a b c a b c a b d a a b c a b d Michael Fularczyk Zeichenketten 17.05.2011 12 / 41

Damit das funktioniert, Vorberechnung nötig. Präfix-Tabelle: a b a b c a b a b Michael Fularczyk Zeichenketten 17.05.2011 13 / 41

Damit das funktioniert, Vorberechnung nötig. Präfix-Tabelle: a b a b c a b a b 0 0 1 2 0 1 2 3 4 Michael Fularczyk Zeichenketten 17.05.2011 13 / 41

Knuth-Morris-Pratt - Anmerkungen Aufwände: Vorbereitung: O(m) Suche: O(n) Gesamt Worst-Case: O(n + m) Gesamt Avg/Best-Case: O(n) Laufzeit somit immer linear. Michael Fularczyk Zeichenketten 17.05.2011 14 / 41

Boyer-Moore Schieben des Patterns wie bei KMP Zwei Strategien zur Berechnung der Schrittweite: bad character - Anhand des ungleichen Zeichens good suffix - Anhand übereinstimmender Zeichen Schiebt Pattern um maximale Weite Vergleicht String/Pattern von Rechts nach Links Michael Fularczyk Zeichenketten 17.05.2011 15 / 41

Boyer-Moore - Suche 2 2 Quelle: www.wi.uni-muenster.de/pi/lehre/ss08/info2/folien/info2k5.pdf Michael Fularczyk Zeichenketten 17.05.2011 16 / 41

Boyer-Moore - bad character Suchvorgang: a b a d b d a a b b d a a b b Michael Fularczyk Zeichenketten 17.05.2011 17 / 41

Boyer-Moore - bad character Suchvorgang: a b a d b d a a b b d a a b b Michael Fularczyk Zeichenketten 17.05.2011 18 / 41

Boyer-Moore - bad character Suchvorgang: a b a d b d a a b b d a a b b Michael Fularczyk Zeichenketten 17.05.2011 19 / 41

Boyer-Moore - bad character Erstelle Tabelle mit Indizes für Zeichen im Pattern Verschiebe bei Mismatch an gespeicherte Position Pattern: a b a b c a d a b Michael Fularczyk Zeichenketten 17.05.2011 20 / 41

Boyer-Moore - bad character Erstelle Tabelle mit Indizes für Zeichen im Pattern Verschiebe bei Mismatch an gespeicherte Position Pattern: a b a b c a d a b Tabelle: a b c d e f g... 8 9 5 7-1 -1-1 -1 Michael Fularczyk Zeichenketten 17.05.2011 20 / 41

Boyer-Moore - good suffix Wie KMP nur Suffix statt Präfix Suchvorgang: a a a g a c d a c b g a c d a c Michael Fularczyk Zeichenketten 17.05.2011 21 / 41

Boyer-Moore - good suffix Suchvorgang: a a a g a c d a c b g a c d a c Michael Fularczyk Zeichenketten 17.05.2011 22 / 41

Boyer-Moore -Kombination Wie Eingangs erwähnt wird das Maximum beider Strategien genommen Suchvorgang: a a a a g a c d a c b g a a c d a c Michael Fularczyk Zeichenketten 17.05.2011 23 / 41

Boyer-Moore - Anmerkungen Aufwände: Vorbereitung: O(m) Suche avg-case: O(n) Suche worst-case: O(n m) Suche best-case: O ( ) n m Maximal 3 n Vergleiche. Michael Fularczyk Zeichenketten 17.05.2011 24 / 41

Rabin-Karp Hashe alle Teilstrings der Länge pattern Hashe pattern und Vergleiche mit Teilstring-Hashes Berechne Hashwert mit Zuhilfenahme des vorherigen Hashes Steht und fällt mit der Hashfunktion Avg/Best-Case = O(n) Worst-Case = O(n m) Michael Fularczyk Zeichenketten 17.05.2011 25 / 41

Rabin-Karp - rolling hashing Berechne Hashwert mit Zuhilfenahme des vorherigen Hashes x = 234567, pattern = L = 3 n 0 = 234, h 0 = h(n 0 ), b = 10, q = 13 h 0 = n 0 %q h i = ((n i 1 n i 1 [0] b L 1 ) b + n i 1 [L 1])%q Entferne 1. Ziffer, multipliziere mit Basis, addiere nächste Ziffer Michael Fularczyk Zeichenketten 17.05.2011 26 / 41

Rabin-Karp - rolling hashing Dank Modulo-Arithmetik: (a%q) + (b%q) (a + b)%q (a%q) (b%q) (a b)%q Kann man h i berechnen mit: h i = (h i 1 (n i 1 [0] b L 1 )%q) b%q +n i 1 [L 1]%q Michael Fularczyk Zeichenketten 17.05.2011 27 / 41

Rabin-Karp - rolling hashing Dank Modulo-Arithmetik: (a%q) + (b%q) (a + b)%q (a%q) (b%q) (a b)%q Kann man h i berechnen mit: h i = (h i 1 (n i 1 [0] b L 1 )%q) b%q +n i 1 [L 1]%q Vorteil: Zwischenergebnisse bleiben klein Michael Fularczyk Zeichenketten 17.05.2011 27 / 41

Rabin-Karp - rolling hashing Dank Modulo-Arithmetik: (a%q) + (b%q) (a + b)%q (a%q) (b%q) (a b)%q Kann man h i berechnen mit: h i = (h i 1 (n i 1 [0] b L 1 )%q) b%q +n i 1 [L 1]%q Vorteil: Zwischenergebnisse bleiben klein Aufwände: Best: O(n); Avg: O(n + m); Worst: O(n m) Michael Fularczyk Zeichenketten 17.05.2011 27 / 41

Suchverfahren - Zusammenfassung Knuth-Morris-Pratt: gut bei kleinem Alphabet garantiert lineare Laufzeit Boyer-Moore: gut bei großem Alphabet (schneller als KMP) schlecht bei kleinem Alphabet (z.b. Bitmuster) da kleine Schiebedistanz mehr Vergleiche Rabin-Karp: Nur so gut wie seine Hash-Funktion Michael Fularczyk Zeichenketten 17.05.2011 28 / 41

Manacher Suche des längsten Palindroms in einem String Speichert in P[] die Anzahl der Nachbarn, die zum Palindrom gehören. P[i] = 3 Max-Palindrom = Text [i-3;i+3] Aufwand: O(n) Michael Fularczyk Zeichenketten 17.05.2011 29 / 41

Manacher Besteht im Grunde aus zwei Formeln: P temp = max{p[j] + j : j < i} und falls P temp i P[i] min{p[2 j i], P[j] + j i} Michael Fularczyk Zeichenketten 17.05.2011 30 / 41

Manacher - Beispiel T = abccacc Setze # zwischen Zeichen T = a#b#c#c#a#c#c Wende Formeln an Michael Fularczyk Zeichenketten 17.05.2011 31 / 41

Manacher - Beispiel T = abccacc Setze # zwischen Zeichen T = a#b#c#c#a#c#c Wende Formeln an a # b # c # c # a # c # c 0 0 1 0 1 2 1 0 4 0 0 1 0 Michael Fularczyk Zeichenketten 17.05.2011 31 / 41

Trie Trie Michael Fularczyk Zeichenketten 17.05.2011 32 / 41

Trie Baumstrukturen zum Speichern von Wörtern Gut zum Suchen von mehreren Queries (Gegensatz: KMP) Kante == Buchstabe Blatt == Terminalsymbol Knoten == Zeichenkette (entspricht Weg zum Knoten) Weg von der Wurzel zum Blatt == Schlüssel Michael Fularczyk Zeichenketten 17.05.2011 33 / 41

Trie 3 3 Quelle: http://en.wikipedia.org/wiki/file:trie_example.svg Michael Fularczyk Zeichenketten 17.05.2011 34 / 41

Patricia - Trie Patricia-Trie == Kompakter Trie. Knoten mit nur einem Kindknoten werden mit diesem zusammengefasst Kanten die ohne Abzweigung zu einem Blatt führen werden zusammengefasst Mehrere Zeichen an einer Kante erlaubt. Michael Fularczyk Zeichenketten 17.05.2011 35 / 41

Suffix - Trie Suffix-Trie == Patricia Trie Speichert alle Suffixe vom Text Keine Vorbereitungsphase für Pattern Durch Verlinkungen im Baum Aufwand: O(n) Speicherbedarf: O(n) (Ukkonen s Online Algorithmus) Implementierung nicht gerade trivial :-/ Michael Fularczyk Zeichenketten 17.05.2011 36 / 41

Bibliotheksfunktionen Bibliotheksfunktionen Michael Fularczyk Zeichenketten 17.05.2011 37 / 41

Bibliotheksfunktionen C/C++ C: Suchen: char strstr (char str, char pattern) Länge: size t strlen (const char ) - muss \0 -terminiert sein. C++: Suchen: size t string :: find ( string str ) Länge: size t string :: length() Suche nach einmaligem Vorkommen schneller als KMP Michael Fularczyk Zeichenketten 17.05.2011 38 / 41

Bibliotheksfunktionen Java Java: Suchen: int String.indexOf(String str ) Länge: int String. length() Michael Fularczyk Zeichenketten 17.05.2011 39 / 41

Ende Ende Michael Fularczyk Zeichenketten 17.05.2011 40 / 41

Quellen http://en.wikipedia.org http://en.wikipedia.org/wiki/trie (Abruf: 11.05.2011) www.wi.uni-muenster.de/pi/lehre/ss08/info2/ folien/info2k5.pdf (Abruf: 16.05.2011) Hallo-Welt Folien zu Zeichenketten (2004, 2007, 2008, 2010) http://zhuhongcheng.wordpress.com/2009/08/02/a-simplelinear-time-algorithm-for-finding-longest -palindrome-sub-string/ (Abruf: 15.05.2011) Michael Fularczyk Zeichenketten 17.05.2011 41 / 41