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

Ähnliche Dokumente
Zeichenketten. 29. April 2015 Benedikt Lorch. Benedikt Lorch Zeichenketten April

Zeichenketten. Michael Fularczyk Michael Fularczyk Zeichenketten / 41

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

Zeichenketten. Von Lisa Marie Dreier. Informatik 2 Programmiersysteme Martensstraße Erlangen

Der Boyer-Moore Algorithmus

Effiziente Algorithmen 2

Informatik II, SS 2018

Informatik II, SS 2014

Algorithmen und Datenstrukturen

Algorithmische Bioinformatik 1

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

Informatik II, SS 2016

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

Knuth Morris Pratt Algorithmus

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

Algorithmen und Datenstrukturen (für ET/IT)

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

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

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

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Such-Algorithmen für Wörterbücher. Wörterbuch. Sommersemester Dr.

ADS: Algorithmen und Datenstrukturen 1

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

Mathematisches Praktikum - SoSe 2015

Rückblick: Längste gemeinsame Zeichenkette

Mathematisches Praktikum - SoSe 2014

Algorithmische Bioinformatik

ADS: Algorithmen und Datenstrukturen 1

2.2 Der Algorithmus von Knuth, Morris und Pratt

Informatik II, SS 2014

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

Übersicht. 1 Einführung. 2 Suchen und Sortieren. 3 Graphalgorithmen. 4 Algorithmische Geometrie. 5 Textalgorithmen. 6 Paradigmen

String matching: Überblick

Informatik II, SS 2016

Algorithmen auf Zeichenketten

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

Indexieren und Suchen

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

Informatik II, SS 2018

String - Matching. Kapitel Definition

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Algorithmische Bioinformatik 1

Algorithmen und Datenstrukturen II

1.5 Boyer-Moore-Algorithmus

Algorithms & Data Structures 2

Boyer Moore Algorithmus

Informatik II Precomputation

ADS: Algorithmen und Datenstrukturen 1

Kapitel 5. Textalgorithmen. 5.1 Grundbegriffe

ADS: Algorithmen und Datenstrukturen 1

Algorithmische Bioinformatik 1

11. Suchen in Texten. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Suchen in Texten SS

Indexieren und Suchen

Algorithmen und Datenstrukturen II

Algorithmische Anwendungen WS 2005 / Praktikum

Algorithmen auf Sequenzen Vorbereitung zur Prüfung

Proseminar String Matching

Algorithmen zur exakten Suche in Texten

Algorithmen und Datenstrukturen 2

1.3 Knuth-Morris-Pratt-Algorithmus

Textsuche. Textsuche

Algorithmen und Datenstrukturen (für ET/IT)

8. Mustersuche in Zeichenketten

Einführung in die Informatik 2

String-Matching-Algorithmen. von. Thomas Kramer

Hallo Welt für Fortgeschrittene

DAP2-Klausur

Non-Standard-Datenbanken

Algorithmen und Datenstrukturen 2

Informatik II, SS 2016

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Teil VII. Hashverfahren

Indexieren und Suchen

Algorithmische Bioinformatik

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

Algorithmen und Datenstrukturen 2

Informatik II Prüfungsvorbereitungskurs

Algorithmen und Datenstrukturen

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

Übung Algorithmen und Datenstrukturen

Grundlagen der Informatik

Hashing II. Übersicht. 1 Hashing und Verkettung. 2 Offene Adressierung

Range-Search. Operationen: Welche Datenstrukturen sind geeignet? Arrays? Listen? AVL-Bäume? Splay-Bäume?

Hashing II. Übersicht. 1 Hashing und Verkettung. 2 Offene Adressierung

Klausur Algorithmen und Datenstrukturen II 01. Agust 2016

ADS: Algorithmen und Datenstrukturen 1

(08 - Einfache Sortierverfahren)

INFORMATIK FÜR BIOLOGEN

Lernmodul 7 Algorithmus von Dijkstra

1.8 Shift-And-Algorithmus

Berühmte Informatiker

Algorithmen und Datenstrukturen (Informatik II) SS Klausur

Grundlegende Algorithmen

ADS: Algorithmen und Datenstrukturen 1

Datenstrukturen & Algorithmen Lösungen zu Blatt 8 FS 16

Klausur Algorithmen und Datenstrukturen II

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss

Transkript:

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

Übersicht String Matching Algorithmen Naive Stringsuche Knuth Morris Pratt (KMP) Algorithmus Boyer-Moore Algorithmus Rabin-Karp Algorithmus Manacher-Algorithmus Suffix-Tries Suffix-Arrays Zeichenketten Folie 2

Naive Stringsuche - Darstellung Suche nach BAUM A B A B A U M A B B A U B B A U M Zeichenketten Folie 3

Naive Stringsuche - Code outer: for (int i = 0; i <= text.length - pattern.length; i++) { for (int j = 0; j < pattern.length; j++) { if (text[i + j]!= pattern[j]) continue outer; } return true; } return false; Einfach und intuitiv, aber... O(n m) Zeichenketten Folie 4

KMP Algorithmus 1970 entwickelt Benannt nach Donald Knuth, James Morris und Vaughan Pratt Effizientere Variante der naiven Suche Zeichenketten Folie 5

KMP Algorithmus Prinzip: Der Suchrahmen kann bei Mismatch meist mehrere Zeichen weiter geschoben werden Bei Wiederholungen des Präfix innerhalb des Pattern kann bei einem Mismatch die Überprüfung folgender Zeichen übersprungen werden 2 Phasen Aufbau einer Präfixtabelle Eigentliche Suche Zeichenketten Folie 6

KMP Algorithmus - Aufbau der Präfixtabelle Die Präfixtabelle beschreibt Wiederholungen des Präfixes im Pattern Zu jedem Zeichen des Patterns wird gespeichert, das wievielte Zeichen des Präfixes hintereinander damit wiederholt wird A B C A D A B C E 0 0 0 1 0 1 2 3 0 Zeichenketten Folie 7

KMP Algorithmus - Aufbau der Präfixtabelle Weitere Beispiele: A A A A A 0 1 2 3 4 A A 5 6 A B B B B 0 0 0 0 0 A B C A D A B C A B 0 0 0 1 0 1 2 3 4 2 Zeichenketten Folie 8

KMP Algorithmus - Suche Pattern: A B C A B D 0 0 0 1 2 0 Text: A B C A B C A B D E A B C A B D A B C A B D Zeichenketten Folie 9

KMP Algorithmus - Laufzeit Vorbereitung: O(m) Suche: O(n) Gesamt: O(n + m) Lineare Laufzeit Zeichenketten Folie 10

Boyer-Moore Algorithmus 1977 entwickelt Benannt nach Robert Boyer und J Moore Pattern wird wie bei KMP geschoben, allerdings werden 2 verschiedene Strategien angewendet Zeichenketten Folie 11

Boyer-Moore Algorithmus Prinzip: 2 verschiedene Strategien (Heuristiken) zur Berechnung der Schiebedistanz werden gleichzeitig verwendet Bad Character Heuristic Good Suffix Heuristic Für beide Strategien wird als Vorbereitung eine Tabelle erstellt Bei jeder Verschiebung wird der größere der beiden Werte verwendet Zeichenketten Folie 12

Boyer-Moore Algorithmus - Bad Character Heuristic In der Tabelle wird für jedes Zeichen der Index des letzten Auftretens im Pattern gespeichert Für alle Zeichen des Alphabets muss ein Eintrag angelegt werden! Kommt ein Zeichen im Pattern nicht vor, wird -1 eingetragen Pattern: A B C D D C B C E Tabelle: A B C D E F... 0 6 7 4 8-1 -1 Zeichenketten Folie 13

Boyer-Moore Algorithmus - Bad Character Heuristic Das Pattern wird von hinten beginnend verglichen Bei Mismatch wird das Pattern nach rechts geschoben so lange bis kein Mismatch mehr auftritt Verschiebung = Index im Pattern Wert in Tabelle Zeichenketten Folie 14

Boyer-Moore Algorithmus - Bad Character Heuristic Verschiebung = Index im Pattern Wert in Tabelle Pattern: Tabelle: A B C D A D A B C D E... 4 1 2 5-1 -1 Text: A A B A A B C D A D E A B C D A D i = 5; Tabelle B = 1 Verschiebung um 5 1 = 4 A B C D A D Zeichenketten Folie 15

Boyer-Moore Algorithmus - Bad Character Heuristic Weiteres Beispiel: Pattern: Tabelle: A B A B A B A B C... 4 5-1 -1 Text: A A B B A C A B A B A A B A B A B i = 5; Tabelle C = 1 Verschiebung um 5 ( 1) = 6 B A B A B A B Zeichenketten Folie 16

Boyer-Moore Algorithmus - Good Suffix Heuristic Bei Mismatch wird der Suchrahmen soweit geschoben, dass das Suffix wieder passt Sehr ähnlich zu KMP, nur mit Suffix statt Präfix A A B C A D E A D E C A D E A D C A D E A D Zeichenketten Folie 17

Boyer-Moore Algorithmus - Kombination Es wird in jedem Schritt das Verfahren verwendet, welches die größere Schiebedistanz erlaubt Beide Strategien sind in bestimmten Szenarien ineffektiv, dann kann aber die jeweils andere verwendet werden Laufzeit: Vorbereitung O(m) Worst Case O(n m) Best Case O(n/m) Besonders geeignet, wenn das Alphabet im Vergleich zum Muster sehr groß ist Zeichenketten Folie 18

Rabin-Karp Algorithmus 1987 entwickelt Benannt nach Michael Rabin und Richard Karp Vergleicht den Hash des Patterns mit Hashes der Substrings des Suchtextes Zeichenketten Folie 19

Rabin-Karp Algorithmus Prinzip: Das Pattern wird gehasht Berechne nacheinander den Hash aller Substrings des Suchtextes Vergleiche jeweils den berechneten Hash mit dem Pattern Überprüfe, ob bei gleichem Hash wirklich der gesuchte String gefunden wurde Die Effektivität des Algorithmus hängt stark mit der Hash- Funktion zusammen Zeichenketten Folie 20

Rabin-Karp Algorithmus Hash-Funktion Anforderungen an die verwendete Hashfunktion: Sollte Kollisionen (einigermaßen) vermeiden Muss ein sog. Rolling Hash sein Darf bestimmte Grenzen nicht überschreiten (z.b. INT_MAX) Der Algorithmus ist nur effektiv, wenn ein Rolling Hash verwendet wird: Hash kann bei Veränderung von nur einem Zeichen aus dem vorherigen Hash in O(1) berechnet werden Eine geeignete Hash-Funktion: Rabin-Fingerprint Zeichenketten Folie 21

Rabin-Karp Algorithmus Rabin-Fingerprint Jedes Zeichen des Alphabets wird als Ziffer interpretiert Bei mehr als 10 möglichen Zeichen reicht das Dezimalsystem nicht mehr Basis somit z.b. 256 Nach jeder Ziffer wird ein Modulo berechnet, damit die Zahlen klein bleiben Der nächste Hash (nach shift) kann dann einfach berechnet werden: 1. Ziffer entfernen Mit Basis multiplizieren Neue Ziffer hinzufügen Zeichenketten Folie 22

Rabin-Karp Algorithmus Rabin-Fingerprint Formel b: Basis (Anzahl möglicher Zeichen) p: Länge des Patterns q: Modulus (Primzahl) t: Suchtext h 0 = ((( t 0 b p 1 mod q) t 1 b p 2 mod q) t p 1 )mod q h i = h i 1 t i 1 b p 1 mod q) b + t[i + p 1])mod q Funktioniert aufgrund der Homomorphie bei Modulo: a mod q b mod q mod q = a b mod q Zeichenketten Folie 23

Rabin-Karp Algorithmus - Zusammenfassung Laufzeit: Vorbereitung O(n) Worst Case O(n m) Average Case O(n) Best Case O(n/m) Besonders geeignet, wenn viele verschiedene [gleich lange] Patterns gesucht werden Zeichenketten Folie 24

Vergleich von String Matching Algorithmen Algorithmus Preprocessing Average Worst Naive Stringsuche Nicht nötig O(n m) O(n m) KMP O(m) O(n) O(n) Boyer-Moore O(m+k) O(n) O(n m) Rabin-Karp O(m+k) O(n) O(n m) Zeichenketten Folie 25

Vergleich von String Matching Algorithmen Naive Stringsuche Ist immer schlecht KMP Immer lineare Laufzeit Boyer-Moore Gut bei großem Alphabet Rabin-Karp Gut, wenn der gleiche Suchstring auf mehrere Patterns überprüft wird Zeichenketten Folie 26

Manacher Algorithmus 1975 entwickelt Benannt nach Glenn Manacher Findet den längsten Substring eines Eingabestrings, der ein Palindrom ist Zeichenketten Folie 27

Manacher Algorithmus - Naiver Ansatz als Basis A A A B A B A B A Baut auf folgendem naiven Ansatz auf: Betrachte nacheinander jedes Zeichen eines Strings sowie jede Position zwischen Zeichen als Zentrum Überprüfe, ob die benachbarten Zeichen des Zentrums gleich sind Wenn sie gleich sind, überprüfe die jeweils nächsten Zeichen, usw. Gehe alle möglichen Zentren durch und speichere jeweils das längste gefundene Palindrom Problem: O(n²) Zeichenketten Folie 28

Manacher Algorithmus Prinzip: Für jedes untersuchte Zentrum wird die Länge des längsten möglichen Palindroms in einer Tabelle gespeichert Das längste Palindrom hat sein Zentrum dann am Index des größten Werts in der Tabelle Ziel: Die Tabelle soll möglichst effizient angelegt werden Dazu wird die Symmetrieeigenschaft von Palindromen ausgenutzt Zeichenketten Folie 29

Manacher Algorithmus - Vorgehen Zwischen allen Zeichen sowie am Anfang und Ende wird jeweils ein Füllzeichen eingefügt Dadurch muss nicht mehr zwischen Palindromen gerader und ungerader Länge unterschieden werden Das Füllzeichen darf nicht Teil des Alphabets sein B A B A A B C A # B # A # B # A # A # B # C # A # Zeichenketten Folie 30

Manacher Algorithmus - Vorgehen Danach nach und nach die Tabelle ausfüllen Wenn das Zentrum noch NICHT innerhalb eines bekannten Palindroms liegt: Größe des Palindroms durch wiederholte Vergleiche der jeweils angrenzenden Zeichen bestimmen # B # A # B # A # A # B # C # A # 0 1 0 3 Wenn das Zentrum innerhalb eines bekannten Palindroms liegt Es werden 3 Fälle unterschieden, die die Spiegeleigenschaft von Palindromen effektiv ausnutzen Zeichenketten Folie 31

Manacher Algorithmus - Vorgehen 1. Fall: Ein Palindrom liegt vollständig innerhalb eines Größeren R' i' Z i R # B # A # B # A # A # B # C # A # 0 1 0 3 0 3 0 1 4 X1 Falls i + P i P i = P[i ] < R, dann gilt Zeichenketten Folie 32

Manacher Algorithmus - Vorgehen 2. Fall: Ein Palindrom geht über den linken Rand eines anderen hinaus R' i' Z i R # B # A # B # A # A # B # C # A # 0 1 0 3 0 3 0 1 4 1 0 X1 Falls i + P i > R, dann gilt P i = R i Denn: Sonst wäre ja das Palindrom um Z auch größer Zeichenketten Folie 33

Manacher Algorithmus - Vorgehen 3. Fall: Ein Palindrom geht genau bis zum linken Rand eines anderen R' i' Z # B # A # B # A # A # B # A # A # 0 1 0 3 0 3 0 1 6 1 0 X5 i R Falls i + P i = R, dann gilt P i P i Ob und um wie viel P i größer ist, muss durch Vergleiche überprüft werden Zeichenketten Folie 34

Manacher Algorithmus - Zusammenfassung Die Tabelle enthält am Ende das größte Palindrom um jedes Zentrum Das größte Palindrom insgesamt ist dann also um die größte Zahl in der Tabelle herum und kann leicht ausgegeben werden Laufzeit: O(n) Zeichenketten Folie 35

Suffix-Tries Trie: Baum-Datenstruktur, die den effektiven Abruf der gespeicherten Daten ermöglichen soll Wortspiel aus Tree und Retrieval Suffix Trie: Enthält alle möglichen Suffixe, die in einem gegebenen Wort vorkommen Es führt immer genau ein Weg von der Wurzel zu einem Blatt Jedes Blatt stellt ein Suffix dar Der Aufbau eines Suffix Tries stellt ein Preprocessing dar, durch das viele Algorithmen effektiv angewendet werden können Zeichenketten Folie 36

Suffix-Tries - Beispiel Suffix-Trie für das Wort BANANA banana\0 a na \0 na \0 na\0 \0 na\0 \0 Zeichenketten Folie 37

Suffix-Tries - Zusammenfassung Laufzeit Aufbau des Suffix-Tries: O(n) Space: O(n) Viele Anwendungen: Longest Common Substring zweier Strings Pattern Matching Longest Palindrome Substring Longest Repeated Substring Zeichenketten Folie 38

Suffix-Arrays Suffix Array: Ein Array aller Suffixe eines Strings Das Array ist sortiert (z.b. alphabetisch) Enthält nicht die eigentlichen Strings sondern nur die Integer Indizes des Anfangs der Substrings Aufbau des Arrays: O(n) Space: O(n) Sehr ähnlich zum Suffix-Trie Suffix-Array kann mithilfe von DFS in O(n) aus einem Suffix- Trie generiert werden Zeichenketten Folie 39

Suffix-Arrays - Beispiel Wort mit Indizes: Sortierte Suffixe: 0 1 2 3 4 5 B A N A N A \0 6 a\0 5 ana\0 3 anana\0 1 banana\0 0 na\0 4 nana\0 2 6 \0 Suffix-Array: { 6, 5, 3, 1, 0, 4, 2 } Zeichenketten Folie 40

Suffix-Arrays - Anwendungen Suffix-Arrays sind nützlich bei: Alle Vorkommen eines Patterns finden (= jedes Suffix finden, dass mit dem Pattern beginnt) Alle Anwendungen des Suffix-Tries Suffix-Array vs. Suffix-Tree Suffix-Array braucht weniger Platz (beide O(n), aber absolut weniger, da nur eine Liste von Integern gespeichert wird) Bestimmte Arten von Pattern Matching sind langsamer in Suffix-Arrays (Patterns mit Wildcards) Zeichenketten Folie 41

Quellen Folien der letzten Jahre: https://www2.cs.fau.de/teaching/ss2011/hallowelt/zk_2011.pdf https://www2.cs.fau.de/teaching/ss2015/hallowelt/zk_2015.pdf https://www2.cs.fau.de/teaching/ss2016/hallowelt/zk_2016.pdf https://www2.cs.fau.de/teaching/ss2017/hallowelt/zk_2017.pdf KMP: https://www.geeksforgeeks.org/searching-for-patterns-set-2-kmp-algorithm/ Bayer-Moore https://epubs.siam.org/doi/pdf/10.1137/0206024 https://www.geeksforgeeks.org/searching-for-patterns-set-2-kmp-algorithm/ http://whocouldthat.be/visualizing-string-matching/ Rabin-Karp https://www.geeksforgeeks.org/searching-for-patterns-set-3-rabin-karp-algorithm/ http://whocouldthat.be/visualizing-string-matching/ http://www.xmailserver.org/rabin.pdf Manacher https://www.geeksforgeeks.org/manachers-algorithm-linear-time-longest-palindromic-substring-part-1/ https://gabrielghe.github.io/university/2016/02/27/manachers-algorithm-longest-palindromic-substring Suffix-Tries Suffix-Arrays http://www.allisons.org/ll/algds/tree/suffix/ https://www.geeksforgeeks.org/pattern-searching-set-8-suffix-tree-introduction/ https://www.geeksforgeeks.org/suffix-array-set-1-introduction/ Zeichenketten Folie 42

Vielen Dank für eure Aufmerksamkeit Noch Fragen? [Katze für Bonuspunkte] Zeichenketten Folie 43