Zeichenketten. 10. Mai 2017 Simon Bachstein Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 1

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

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

Zeichenketten. Michael Fularczyk Michael Fularczyk Zeichenketten / 41

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

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

Effiziente Algorithmen 2

Algorithmen und Datenstrukturen

Algorithmische Bioinformatik 1

Universität Bremen. Textsuche. Thomas Röfer. Naive Suche Verfahren von Knuth-Morris-Pratt Verfahren von Boyer-Moore Ähnlichkeitssuche Editierdistanz

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

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Entartete Suchbäume. Beispiel: Balancieren von Suchbaum. Wintersemester 2012/13

Zeichenketten. Hallo Welt für Fortgeschrittene Daniel Wust Informatik 2 Programmiersysteme Martensstraße Erlangen

ADS: Algorithmen und Datenstrukturen 1

Informatik II, SS 2018

Informatik II, SS 2016

String - Matching. Kapitel Definition

Boyer Moore Algorithmus

Algorithmen zur exakten Suche in Texten. Algorithmen und Datenstrukturen II 1

TU München. Hauptseminar: WS 2002 / Einführung in Suffix - Bäume

Algorithmen und Datenstrukturen

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

Algorithmische Bioinformatik 1

Algorithmen und Datenstrukturen 2

2.2 Der Algorithmus von Knuth, Morris und Pratt

Algorithms & Data Structures 2

Rückblick: Längste gemeinsame Zeichenkette

Algorithmen und Datenstrukturen II

String matching: Überblick

ADS: Algorithmen und Datenstrukturen 1

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

Suche in Texten. Verschiedene Szenarios: Dynamische Texte. Texteditoren Symbolmanipulatoren. Statische Texte

Algorithmen und Datenstrukturen 2

1.3 Knuth-Morris-Pratt-Algorithmus

Algorithmische Bioinformatik 1

Proseminar String Matching

Algorithmen und Datenstrukturen II

Algorithmen zur exakten Suche in Texten

Kapitel 5. Textalgorithmen. 5.1 Grundbegriffe

Berühmte Informatiker

Mathematisches Praktikum - SoSe 2015

Indexieren und Suchen

Hallo Welt für Fortgeschrittene

Mathematisches Praktikum - SoSe 2014

Textsuche. Textsuche

8. Mustersuche in Zeichenketten

4.9.7 Konstruktion der Suffixbäume

4. Suche in Texten. Suche in (weitgehend) statischen Texten -> Indexierung 4-1. Einführung

Einführung in die Informatik 2

String-Matching-Algorithmen. von. Thomas Kramer

Algorithmen und Datenstrukturen (Informatik II) SS Klausur

Proseminar "Pattern Matching"

Algorithmische Bioinformatik

Informatik II, SS 2018

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

1.8 Shift-And-Algorithmus

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

Algorithmen auf Zeichenketten

Algorithmen auf Sequenzen Vorbereitung zur Prüfung

Algorithmen und Datenstrukturen 2

Grundlagen Theoretischer Informatik I SoSe 2011 in Trier. Henning Fernau Universität Trier

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

Indexieren und Suchen

6. Algorithmen auf Zeichenketten

ADS: Algorithmen und Datenstrukturen 1

Dynamisches Huffman-Verfahren

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

7. Sortieren Lernziele. 7. Sortieren

Algorithmen auf Sequenzen

(08 - Einfache Sortierverfahren)

Algorithmen und Datenstrukturen 1 Kapitel 6 Algorithmen auf Zeichenreihen

String Matching 2. Definition Ein Alphabet ist eine nichtleere, endliche Menge S von Zeichen.

Sortieren II / HeapSort Heaps

Lernmodul 7 Algorithmus von Dijkstra

Algorithmen und Datenstrukturen (für ET/IT)

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

Kapitel 1. Exakte Suche nach einem Wort. R. Stiebe: Textalgorithmen, WS 2003/04 11

Aufgabe 3: Erste Versuche im Indexieren des Templates. Ulf Leser Wissensmanagement in der Bioinformatik

Algorithmen und Datenstrukturen

Bioinformatik Für Biophysiker

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 2. Spezifikation Schrittweise Verfeinerung

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

Kapitel 12: Induktive

Graphalgorithmen II. Werner Sembach Werner Sembach Graphalgorithmen II / 22

Übung 2 Algorithmische Bioinformatik WS 15/16. Yvonne Mayer

Bioinformatik Für Biophysiker

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015

10. Übungsblatt zu Algorithmen I im SS 2010

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

Algorithmen und Datenstrukturen in der Bioinformatik Erstes Übungsblatt WS 05/06 Musterlösung

Exakte Suche nach einem Wort

12. AuD Tafelübung T-C3

Lexikalische Programmanalyse der Scanner

Sortieren und Suchen. Jens Wächtler Hallo Welt! -Seminar LS 2

Effiziente Algorithmen und Komplexitätstheorie

Anregungen zu Übung 2

Referat zum Thema Huffman-Codes

Repetitive Strukturen

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Klausur "C#" WS 2012/2013

Die Nerode-Relation und der Index einer Sprache L

Transkript:

Zeichenketten 10. Mai 2017 Simon Bachstein 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 1

Übersicht String-Matching Problem Motivation Algorithmen zur Lösung Naive Stringsuche KMP Algorithmus Boyer-Moore Algorithmus Rabin-Karp Algorithmus Manacher Algorithmus für Palindrome Suffix-Tries 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 2

String-Matching Problem Text T = t 1 t 2...t n mit Länge n Suchmuster (Pattern) P = p 1 p 2...p m mit Länge m t k, m k aus gemeinsamen Alphabet Ziel: Finde ein (alle) k sodass t k = m k, t k+1 = m k+1, t k+m-1 = m k+m-1 D.h. finde die Position(en) von Muster im Text Beispiel: T = Nudelauflauf, M = lauf k 1 = 4 (Nudelauflauf), k 2 = 8 (Nudelauflauf) 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 3

Naiver Algorithmus Text und Suchmuster linksbündig untereinander stellen Zeichen pro Zeichen vergleichen Bei Mismatch Suchmuster um eine Position nach rechts verschieben und die Suche bei Beginn des Suchmusters erneut beginnen Mit Worst-Case-Laufzeit O(nm) vergleichsweise sehr langsam Keine Vorbereitungen notwendig 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 4

KMP Algorithmus Entwickelt von Donald Ervin Knuth, James Hiram Morris und Vaughan Ronald Pratt Baut auf naivem Algorithmus auf Verwirft bei Mismatches das Wissen bisheriger Vergleiche nicht Reduziert Laufzeit von O(nm) auf O(n) Läuft in zwei Phasen ab Analyse des Suchmusters Eigentliches Suchen des Musters 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 5

KMP Algorithmus Analyse des Suchmusters Suchmuster in seine m+1 Präfixe zerlegen Präfixe auf Ränder absuchen Länge der längsten Ränder jeweils für spätere Verwendung speichern Länge des Rands des Leerstrings ist per Definition -1 Beispiel am Suchmuster abacaba k Substring Rand Länge Rand 0 (leer) (leer) -1 1 a (leer) 0 2 ab (leer) 0 3 aba a 1 4 abac (leer) 0 5 abaca a 1 6 abacab ab 2 7 abacaba aba 3 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 6

KMP Algorithmus Analyse des Suchmusters Algorithmus zur Implementierung der Präfixtabelle: public int[] getprefixtable(char[] input) { int j = -1; int[] table = new int[input.length + 1]; table[0] = j; for(int i = 0; i < input.length; i++) { while(j >= 0 && input[j]!= input[i]) j = table[j]; j++; table[i+1] = j; } } return table; Position 0 1 2 3 4 5 6 Zeichen a b a c a b a Tabelle -1 0 0 1 0 1 2 3 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 7

KMP Algorithmus Eigentliche Suche List<Integer> getmatches(char[] text, char[] muster) { List<Integer> resultlist = new ArrayList<Integer>(); int[] prefixtable = getprefixtable(input); int j = 0; // Position im Muster // Den Text Zeichen um Zeichen durchgehen for(int i = 0; i < text.length; i++) { // Muster verschieben bis aktuelle Position // im Text mit Position im Muster übereinstimmt while(j >= 0 && text[i]!= input[j]) j = prefixtable[j]; j++; // Muster um eins verschieben if(j == input.length) { // Muster fertig durchsucht resultlist.add(i - input.length); j = prefixtable[j]; } } return resultlist; } 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 8

KMP Algorithmus Eigentliche Suche Suchmuster und Text werden untereinander geschrieben Text wird Zeichen für Zeichen durchgegangen, ähnlich wie bei naiver Suche An jedem Zeichen: Solange Mismatch auftritt: Verschieben des Musters mittels Präfixtabelle nach rechts, ggf. mehrfach Eine Stelle weiter gehen Falls Suchmuster zu Ende: Treffer gefunden, entweder aufhören oder wieder mittels Präfixtabelle nach rechts verschieben 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 9

KMP Algorithmus Eigentliches Suchen Index 0 1 2 3 4 5 6 7 Zeichen a b a c a b a Tabelle -1 0 0 1 0 1 2 3 0 1 2 3 4 5 6 7 8 9 10 11 12 Textposition a b a a b b a b a c a b a Text a b a c a b a Mismatch Pos 3, Tabelle[3] = 1 Um (3-1) = 2 verschieben a b a c a b a Mismatch Pos 1, Tabelle[1] = 0 Um (1-0) = 1 verschieben a b a c a b a Mismatch Pos 2, Tabelle[2] = 0 a b a c a b a Mismatch Pos 0, Tabelle[0] = -1 a b a c a b a Match an Textposition 6-12 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 10

KMP Algorithmus Laufzeit Erstellen der Präfixtabelle in O(m) Einmaliges Durchlaufen des Textes, insgesamt O(n) Vergleiche Laufzeit beträgt also O(m+n) = O(n), wenn m <= n m > n kein Treffer möglich Aussteigen in O(1) 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 11

Boyer-Moore-Algorithmus Entwickelt von Robert S. Boyer und J. Strother Moore Benutzt bei Mismatches zwei Heuristiken zur Ermittlung wie weit das Suchmuster verschoben werden kann Berechnet für beide Heuristiken Sprungtabellen Text und Muster werden linksbündig untereinander gestellt und Zeichen für Zeichen von rechts beginnend verglichen Pro Schritt wird die Heuristik die größeren Sprung erlaubt angewendet Worst-Case-Laufzeit mit geringfügiger Modifikation ist O(n) Falls das Alphabet im Vergleich zum Muster groß ist bis zu O(n/m) 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 12

Boyer-Moore-Algorithmus Bad Character Heuristic Bei Mismatch: Muster so lange nach rechts verschieben bis an der betrachteten Stelle kein Mismatch mehr auftritt Wie weit gesprungen werden muss wird zur Beschleunigung vorberechnet Einzelner Sprung um 4 Positionen: a b a b c a b a b c a b a b c a b a b Im Vorlauf werden hierfür die Positionen des jeweils letzten Auftretens der einzelnen Zeichen im Muster gespeichert: a b c d... 3 4 0-1... 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 13

Boyer-Moore-Algorithmus Good Suffix Heuristic Bei Mismatch wird Muster soweit verschoben, dass das passt Suffix erneut passt Wie weit gesprungen werden muss wird zur Beschleunigung vorberechnet Einzelner Sprung um 3 Zeichen: a b b b a c b a a b a c b a b a c b a Im Vorlauf werden für alle möglichen Suffixe die entsprechenden Sprungziele gespeichert, ähnlich der Präfixtabelle bei KMP 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 14

Rabin-Karp Algorithmus Entwickelt von Michael O. Rabin und Richard M. Karp Vergleicht Signaturen (Hashwerte) der Substrings des Textes mit Signaturen des Musters anstelle der Originalstrings Beispiel mit Quersumme als Signaturfunktion: Anstatt 123 mit 456 wird 1 + 2 + 3 = 6 mit 4 + 5 + 6 = 15 verglichen Bei gleichen Signaturen muss nachträglich der Originalstring nochmal geprüft werden wegen Kollisionsgefahr Wahl der Signatur sodass die Signatur an der Stelle i + 1 ohne großen Aufwand aus der Signatur an der Stelle i berechnet werden kann Vergleich der Signaturen erfolgt in (kurzer) konstanter Zeit Average Case Laufzeit: O(n), Worst Case (selten): O(mn) Mehrere Muster gleichzeitig performant suchbar 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 15

Rabin-Karp Algorithmus Beispiel: Text = 3141592653, Muster = 265, Signaturfunktion ist Quersumme Signatur des Musters ist 2 + 6 + 5 = 13 0 1 2 3 4 5 6 7 8 9 Sig. Substr. 3 1 4 1 5 9 2 6 5 3 2 6 5 3 + 1 + 4 = 8 2 6 5 8 + 1 3 = 6 2 6 5 6 + 5 1 = 10 2 6 5 10 4 + 9 = 15 2 6 5 15 1 + 2 = 16 2 6 5 16 5 + 6 = 17 2 6 5 17 9 + 5 = 13 2 6 5 Match 2 6 5 13 2 + 2 = 13 2 6 5 Kein Match 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 16

Manacher Algorithmus Algorithmus um das längste Palindrom in einem String zu ermitteln Basiert auf naivem Ansatz jede Position als Zentrum eines Palindroms auszutesten Reduziert Laufzeit O(n²) des naiven Ansatzes auf O(n) Zeichenkette wird vorbereitet: Zwischenräume werden durch ein Trennzeichen ersetzt, vor und nach den String wird jeweils ein Sonderzeichen platziert Symmetrieeigenschaft von Palindromen wird ausgenutzt um Vergleiche einzusparen Das Palindrom mit höchster rechter Grenze wird jeweils zwischengemerkt um durch die Symmetrieeigenschaften Vergleiche einzusparen 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 17

Manacher Algorithmus Beispiel: ABABA, Trennzeichen: #, Start: @, Ende: $ 0 1 2 3 4 5 6 7 8 9 10 11 12 @ # A # B # A # B # A # $ Zeichen 0 0 und 2 passen nicht 1 1 und 3 passen 1 * 0 und 4 passen nicht Neues Merkpalindrom 0 2 und 4 passen nicht 1 3 und 5 passen 2 2 und 6 passen 3 1 und 7 passen 3 * 0 und 8 passen nicht Neues Markpalindrom 0 Kopiert von 3 0 4 und 6 passen nicht 1 Kopiert von 2 2 4 und 8 passen 5 und 7 keine Prüfung! 5 * 3 und 9, 2 und 10, 1 und 11 passen, 0 und 12 nicht Neues Merkpalindrom 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 18

Tries Datenstruktur: Gerichteter Baum speichert mehrere Wörter Kanten sind beschriftet mit Buchstaben der Worte Jedes Blatt repräsentiert ein mögliches Wort (gelesen von Wurzel in Richtung Blatt) Anwendungsbeispiel: Autovervollständigung 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 19

Suffix Tries Datenstruktur: Gerichteter Baum zu einem Wort Terminierungszeichen wird an das Wortende angehangen Kanten sind beschriftet mit Buchstaben des Wortes Jedes Blatt repräsentiert ein mögliches Suffix des Wortes (von der Wurzel in Richtung Blatt gelesen) Können in O(n) mit O(n) Speicher generiert werden (Ukkonen Algorithmus) Anwendung: Substringprüfung: Ist aba Substring von ababa? Gehe jedes Zeichen von aba durch und prüfe vom Startknoten ausgehend ob es eine Kante mit diesem Zeichen gibt. Ja Gehe die Kante entlang, ist der potentielle Substring zu Ende ist er Substring Ja und Zielknoten ist Blatt Substring ist sogar Suffix Nein Der potentielle Substring ist kein Substring 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 20

Suffix Tries Beispieltrie von ababa und Mustern aba und bab 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 21

Quellen http://www.inf.fh-flensburg.de/lang/algorithmen/pattern/kmp.htm http://www.inf.fh-flensburg.de/lang/algorithmen/pattern/bm.htm http://www.inf.fh-flensburg.de/lang/algorithmen/pattern/karp.htm https://www.youtube.com/watch?v=nbtsfrefo6m http://www.cs.jhu.edu/~langmea/resources/lecture_notes/tries_and_suffix_tries.pdf Jeweils am 03.05.17 abgerufen https://en.wikipedia.org/wiki/ukkonen%27s_algorithm Jeweils am 09.05.17 abgerufen 10.05.2017 Simon Bachstein Hallo Welt -Seminar - LS 2 Zeichenketten 22