Algorithmen auf Zeichenketten

Ähnliche Dokumente
String matching: Überblick

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

Effiziente Algorithmen 2

Algorithmische Bioinformatik 1

Kryptographische Protokolle

Mathematik für Informatiker II (Maikel Nadolski)

Algorithmen und Datenstrukturen

Bioinformatik Für Biophysiker

1.8 Shift-And-Algorithmus

Algorithmen und Datenstrukturen

Relationen und DAGs, starker Zusammenhang

String - Matching. Kapitel Definition

INFORMATIK FÜR BIOLOGEN

Algorithmische Kryptographie

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

ADS: Algorithmen und Datenstrukturen 2

INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS

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

Zeichenketten. Michael Fularczyk Michael Fularczyk Zeichenketten / 41

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

Der Boyer-Moore Algorithmus

1.5 Boyer-Moore-Algorithmus

Rückblick: Längste gemeinsame Zeichenkette

Algorithmen und Datenstrukturen II

3. Übung Algorithmen I

Randomisierte Algorithmen 2. Erste Beispiele

Probabilistische Primzahltests

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

Der Primzahltest von Agrawal, Kayal und Saxena. Dr. Gerold Jäger

Bioinformatik Für Biophysiker

Vorlesung Sicherheit

Hallo Welt für Fortgeschrittene

4. Übung zu Algorithmen I 17. Mai 2017

Vorlesung Sicherheit

Algorithmen und Datenstrukturen (Informatik II) SS Klausur

Algorithmische Geometrie Thema: Konvexe Hüllen

8. Mustersuche in Zeichenketten

Lineare Kongruenzgeneratoren und Quicksort

Übung Algorithmen und Datenstrukturen

Humboldt-Universität zu Berlin Berlin, den Institut für Informatik

Knuth Morris Pratt Algorithmus

String-Matching-Algorithmen. von. Thomas Kramer

Probabilistische Algorithmen

4.4.1 Statisches perfektes Hashing. des Bildbereichs {0, 1,..., n 1} der Hashfunktionen und S U, S = m n, eine Menge von Schlüsseln.

Berechenbarkeitstheorie 19. Vorlesung

Programmieren und Problemlösen

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

Zahlentheorie, Arithmetik und Algebra I

5. Algorithmen. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Theorie der Informatik. Theorie der Informatik P und NP Polynomielle Reduktionen NP-Härte und NP-Vollständigkeit

Übungen zu Algorithmen

Prof. Dr. Heinrich Müller; Dr. Frank Weichert 7. September 2015

Randomisierte Algorithmen und probabilistische Analyse

3: Primzahlen. 111 S. Lucks Diskr Strukt. (WS 18/19) 3: Primzahlen

3: Zahlentheorie / Primzahlen

Diskrete Mathematik 1

Algorithmen auf Sequenzen

1.3 Knuth-Morris-Pratt-Algorithmus

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

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

Erweiterter Euklidischer Algorithmus

Hallo Welt für Fortgeschrittene

Algorithmen und Datenstrukturen

Transkript:

Algorithmen auf Zeichenketten Rabin-Karp Algorithmus Christoph Hermes hermes@hausmilbe.de Zeichenketten: Rabin-Karp Algorithmus p. 1/19

Ausblick auf den Vortrag theoretische Grundlagen... Zeichenketten: Rabin-Karp Algorithmus p. 2/19

Ausblick auf den Vortrag theoretische Grundlagen... Motivation Zeichenketten: Rabin-Karp Algorithmus p. 2/19

Ausblick auf den Vortrag theoretische Grundlagen... Motivation...aber in der Praxis? Zeichenketten: Rabin-Karp Algorithmus p. 2/19

Ausblick auf den Vortrag theoretische Grundlagen... Motivation...aber in der Praxis? Wahrscheinlichkeitstheoreme Zeichenketten: Rabin-Karp Algorithmus p. 2/19

Ausblick auf den Vortrag theoretische Grundlagen... Motivation...aber in der Praxis? Wahrscheinlichkeitstheoreme Ergänzungen Zeichenketten: Rabin-Karp Algorithmus p. 2/19

Ausblick auf den Vortrag theoretische Grundlagen... Motivation...aber in der Praxis? Wahrscheinlichkeitstheoreme Ergänzungen Analyse / Demonstration Zeichenketten: Rabin-Karp Algorithmus p. 2/19

Ausblick auf den Vortrag theoretische Grundlagen... Motivation...aber in der Praxis? Wahrscheinlichkeitstheoreme Ergänzungen Analyse / Demonstration Literaturangaben Zeichenketten: Rabin-Karp Algorithmus p. 2/19

Theorie: Einführung Algorithmus von R.M. Karp und M.O. Rabin 1987 veröffentlicht Zeichenketten: Rabin-Karp Algorithmus p. 3/19

Theorie: Einführung Algorithmus von R.M. Karp und M.O. Rabin 1987 veröffentlicht Grundidee: Transformation Vergleich von Zeichenketten Arithmetik Zeichenketten: Rabin-Karp Algorithmus p. 3/19

Theorie: Einführung Algorithmus von R.M. Karp und M.O. Rabin 1987 veröffentlicht Grundidee: Transformation Vergleich von Zeichenketten Arithmetik In diesem Vortrag gilt: Σ = {0, 1} binärer Text (Bsp.: 010010) T : Text m = T Länge d. Textes P : Pattern n = P Länge d. Musters Zeichenketten: Rabin-Karp Algorithmus p. 3/19

Theorie: Hashfunktion I Eine Hashfunktion versucht, einen Bereich von Daten durch eine Ganzzahl zu repräsentieren Zeichenketten: Rabin-Karp Algorithmus p. 4/19

Theorie: Hashfunktion I Eine Hashfunktion versucht, einen Bereich von Daten durch eine Ganzzahl zu repräsentieren Funktion für das Muster P der Länge n: H(P ) = n i=1 2 n i P (i) Zeichenketten: Rabin-Karp Algorithmus p. 4/19

Theorie: Hashfunktion I Eine Hashfunktion versucht, einen Bereich von Daten durch eine Ganzzahl zu repräsentieren Funktion für das Muster P der Länge n: H(P ) = n i=1 2 n i P (i) Beispiel: P = (1101), n = 4 H(P ) = 2 3 1 + 2 2 1 + 2 1 0 + 2 0 1 = 13 Zeichenketten: Rabin-Karp Algorithmus p. 4/19

Theorie: Hashfunktion II analog gilt für T an der Stelle r: H(T r ) = n i=1 2 n i T (r + i 1) Zeichenketten: Rabin-Karp Algorithmus p. 5/19

Theorie: Hashfunktion II analog gilt für T an der Stelle r: H(T r ) = n i=1 2 n i T (r + i 1) Beispiel: T = (10110110), r = 3, n = 4 H(T r ) = 13 Zeichenketten: Rabin-Karp Algorithmus p. 5/19

Theorie: Hashfunktion II analog gilt für T an der Stelle r: H(T r ) = n i=1 2 n i T (r + i 1) Beispiel: T = (10110110), r = 3, n = 4 H(T r ) = 13 Zeichenketten: Rabin-Karp Algorithmus p. 5/19

Theorie: Hashfunktion II analog gilt für T an der Stelle r: H(T r ) = n i=1 2 n i T (r + i 1) Beispiel: T = (10110110), r = 3, n = 4 H(T r ) = 13 Falls P in T an der Stelle r vorkommt, muss gelten: H(P ) = H(T r ) Zeichenketten: Rabin-Karp Algorithmus p. 5/19

Motivation Warum einen solchen Algorithmus verwenden? leichte Erweiterung auf andere Probleme: zweidimensionales Pattern Matching (Bildsuche) Zeichenketten: Rabin-Karp Algorithmus p. 6/19

Motivation Warum einen solchen Algorithmus verwenden? leichte Erweiterung auf andere Probleme: zweidimensionales Pattern Matching (Bildsuche) gilt als sicher : Vollständig analysiert mit Hilfe von Beweisen Zeichenketten: Rabin-Karp Algorithmus p. 6/19

Motivation Warum einen solchen Algorithmus verwenden? leichte Erweiterung auf andere Probleme: zweidimensionales Pattern Matching (Bildsuche) gilt als sicher : Vollständig analysiert mit Hilfe von Beweisen einfache Implementierung Zeichenketten: Rabin-Karp Algorithmus p. 6/19

Fingerprint-Methode I Problem: Der Speicherbereich wird sehr schnell in der Hashfunktion verletzt: unsigned int: 2 32 P < 32 Zeichenketten: Rabin-Karp Algorithmus p. 7/19

Fingerprint-Methode I Problem: Der Speicherbereich wird sehr schnell in der Hashfunktion verletzt: unsigned int: 2 32 P < 32 Lösung: Verwendung des Modulo-Operators (%, mod ) mit einer Primzahl p (Fingerprint) Zeichenketten: Rabin-Karp Algorithmus p. 7/19

Fingerprint-Methode I Problem: Der Speicherbereich wird sehr schnell in der Hashfunktion verletzt: unsigned int: 2 32 P < 32 Lösung: Verwendung des Modulo-Operators (%, mod ) mit einer Primzahl p (Fingerprint) Somit ergeben sich für die Hashfunktionen: [H p (P ) = H(P ) mod p] [H p (T r ) = H(T r ) mod p] Zeichenketten: Rabin-Karp Algorithmus p. 7/19

Fingerprint-Methode I Problem: Der Speicherbereich wird sehr schnell in der Hashfunktion verletzt: unsigned int: 2 32 P < 32 Lösung: Verwendung des Modulo-Operators (%, mod ) mit einer Primzahl p (Fingerprint) Somit ergeben sich für die Hashfunktionen: [H p (P ) = H(P ) mod p] [H p (T r ) = H(T r ) mod p] Aber: Der Bereich der exakten Suche wird verlassen! Zeichenketten: Rabin-Karp Algorithmus p. 7/19

Fingerprint-Methode II Problem: H p verletzt vor der mod-operation immer noch den Speicher! Zeichenketten: Rabin-Karp Algorithmus p. 8/19

Fingerprint-Methode II Problem: H p verletzt vor der mod-operation immer noch den Speicher! Lösung: Horner-Regel H p (P ) = {[... ({[P (1) 2 mod p + P (2)] 2 mod p + P (3)} 2 mod p + P (4))... ] 2 mod p + P (n)} mod p Zeichenketten: Rabin-Karp Algorithmus p. 8/19

Fingerprint-Methode II Problem: H p verletzt vor der mod-operation immer noch den Speicher! Lösung: Horner-Regel H p (P ) = {[... ({[P (1) 2 mod p + P (2)] 2 mod p + P (3)} 2 mod p + P (4))... ] 2 mod p + P (n)} mod p Vorteile: keine Zahl 2p Zeichenketten: Rabin-Karp Algorithmus p. 8/19

Fingerprint-Methode II Problem: H p verletzt vor der mod-operation immer noch den Speicher! Lösung: Horner-Regel H p (P ) = {[... ({[P (1) 2 mod p + P (2)] 2 mod p + P (3)} 2 mod p + P (4))... ] 2 mod p + P (n)} mod p Vorteile: keine Zahl 2p lineare Berechnung, aber... Zeichenketten: Rabin-Karp Algorithmus p. 8/19

Berechnung in linearer Zeit I Problem: Algorithmus läuft insgesamt immer noch in O(nm) Zeichenketten: Rabin-Karp Algorithmus p. 9/19

Berechnung in linearer Zeit I Problem: Algorithmus läuft insgesamt immer noch in O(nm) Lösung: Information aus der Berechnung von H(T r 1 ) für H(T r ) nutzen Zeichenketten: Rabin-Karp Algorithmus p. 9/19

Berechnung in linearer Zeit I Problem: Algorithmus läuft insgesamt immer noch in O(nm) Lösung: Information aus der Berechnung von H(T r 1 ) für H(T r ) nutzen rekusive Formulierung für H(T r ): H(T r ) = 2 H(T r 1 ) 2 n T (r 1)+T (r + n 1) Zeichenketten: Rabin-Karp Algorithmus p. 9/19

Berechnung in linearer Zeit I Problem: Algorithmus läuft insgesamt immer noch in O(nm) Lösung: Information aus der Berechnung von H(T r 1 ) für H(T r ) nutzen rekusive Formulierung für H(T r ): H(T r ) = 2 H(T r 1 ) 2 n T (r 1)+T (r + n 1) mit der Definition von H p (T r ) H p (T r ) = H(T r ) mod p gilt dann... Zeichenketten: Rabin-Karp Algorithmus p. 9/19

Berechnung in linearer Zeit II H p (T r ) = [(2 H p (T r 1 ) mod p) (2 n mod p) T (r 1) + T (r + n 1)] mod p Zeichenketten: Rabin-Karp Algorithmus p. 10/19

Berechnung in linearer Zeit II H p (T r ) = [(2 H p (T r 1 ) mod p) (2 n mod p) T (r 1) + T (r + n 1)] mod p mit 2 n mod p = 2 (2 n 1 mod p) mod p Zeichenketten: Rabin-Karp Algorithmus p. 10/19

Berechnung in linearer Zeit II mit H p (T r ) = [(2 H p (T r 1 ) mod p) (2 n mod p) T (r 1) + T (r + n 1)] mod p 2 n mod p = 2 (2 n 1 mod p) mod p Nun haben wir alles, um einen Algorithmus aufzustellen, der in O(n + m) läuft Zeichenketten: Rabin-Karp Algorithmus p. 10/19

Pseudocode 1: RabinKarp (P : Muster, T : Text, p: Primzahl) 2: n P, m T 3: H p (P ) computehash(), H p (T 1 ) computehash() Zeichenketten: Rabin-Karp Algorithmus p. 11/19

Pseudocode 1: RabinKarp (P : Muster, T : Text, p: Primzahl) 2: n P, m T 3: H p (P ) computehash(), H p (T 1 ) computehash() 4: if (H p (T 1 ) == H p (P )) then 5: print Match an der Stelle 0 gefunden 6: end if Zeichenketten: Rabin-Karp Algorithmus p. 11/19

Pseudocode 1: RabinKarp (P : Muster, T : Text, p: Primzahl) 2: n P, m T 3: H p (P ) computehash(), H p (T 1 ) computehash() 4: if (H p (T 1 ) == H p (P )) then 5: print Match an der Stelle 0 gefunden 6: end if 7: for (i 2) to (m n + 1) do 8: H p (T i ) makeshift(h p (T i 1 )) 9: if (H p (P ) == H p (T i )) then 10: print Match an der Stelle, i, gefunden 11: end if 12: end for Zeichenketten: Rabin-Karp Algorithmus p. 11/19

false matches Wie schon erwähnt, gilt H p (P ) H p (T r ) aber H p (T r ) H p (P ) (false match) Zeichenketten: Rabin-Karp Algorithmus p. 12/19

false matches Wie schon erwähnt, gilt H p (P ) H p (T r ) aber H p (T r ) H p (P ) (false match) Zwickmühle: p klein: Effiziente Berechnung p groß: geringe Wahrscheinlichkeit eines false matches Zeichenketten: Rabin-Karp Algorithmus p. 12/19

false matches Wie schon erwähnt, gilt H p (P ) H p (T r ) aber H p (T r ) H p (P ) (false match) Zwickmühle: p klein: Effiziente Berechnung p groß: geringe Wahrscheinlichkeit eines false matches Wie muss p gewählt werden? Wahrscheinlichkeitsrechnung Zeichenketten: Rabin-Karp Algorithmus p. 12/19

The Central Theorem I Definition: Für alle u N gibt π(u) die Anzahl der Primzahlen u an Zeichenketten: Rabin-Karp Algorithmus p. 13/19

The Central Theorem I Definition: Für alle u N gibt π(u) die Anzahl der Primzahlen u an Beispiel: u = 29 π(u) = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29} = 10 Zeichenketten: Rabin-Karp Algorithmus p. 13/19

The Central Theorem I Definition: Für alle u N gibt π(u) die Anzahl der Primzahlen u an Beispiel: u = 29 π(u) = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29} = 10 Das zentrale Theorem von Rabin&Karp: (w sei die Wahrscheinlichkeit, dass ein false match auftritt) (n m) 29: I N: p I: w π(nm) π(i) Zeichenketten: Rabin-Karp Algorithmus p. 13/19

The Central Theorem II Beispiel: Wähle n = 250, m = 10.000 und I = 2 31 (max. Speicherbereich für int in der Horner-Regel) π(nm) π(i) 0, 0017 Zeichenketten: Rabin-Karp Algorithmus p. 14/19

The Central Theorem II Beispiel: Wähle n = 250, m = 10.000 und I = 2 31 (max. Speicherbereich für int in der Horner-Regel) π(nm) π(i) 0, 0017 Die Wahrscheinlichkeit, dass ein false match auftritt, beträgt 0.1%! Zeichenketten: Rabin-Karp Algorithmus p. 14/19

Erweiterung: Mehrere Primzahlen eine Primzahl ist gut, mehrere sind besser... Wähle p 1, p 2,..., p k I zufällig und berechne k Fingerprints Zeichenketten: Rabin-Karp Algorithmus p. 15/19

Erweiterung: Mehrere Primzahlen eine Primzahl ist gut, mehrere sind besser... Wähle p 1, p 2,..., p k I zufällig und berechne k Fingerprints Wahrscheinlichkeit w eines false matches: w [ ] k π(nm) Exponentielle Verringerung! π(i) Zeichenketten: Rabin-Karp Algorithmus p. 15/19

Erweiterung: Mehrere Primzahlen eine Primzahl ist gut, mehrere sind besser... Wähle p 1, p 2,..., p k I zufällig und berechne k Fingerprints Wahrscheinlichkeit w eines false matches: w [ ] k π(nm) Exponentielle Verringerung! π(i) Somit ergibt sich mit k = 4 für das Beispiel: [ ] 4 π(nm) w 9, 2 10 12 π(i) Zeichenketten: Rabin-Karp Algorithmus p. 15/19

Erweiterung: Mehrere Primzahlen aber man kann die Schranke nach Rabin&Karp noch weiter heruntersetzen: w m [ π(n) π(i) ] k Zeichenketten: Rabin-Karp Algorithmus p. 16/19

Erweiterung: Mehrere Primzahlen aber man kann die Schranke nach Rabin&Karp noch weiter heruntersetzen: w m [ π(n) π(i) ] k daraus folgt für das Beispiel: w 6, 5 10 22 Zeichenketten: Rabin-Karp Algorithmus p. 16/19

Erweiterung: Mehrere Primzahlen aber man kann die Schranke nach Rabin&Karp noch weiter heruntersetzen: w m [ π(n) π(i) ] k daraus folgt für das Beispiel: w 6, 5 10 22 ein false match kann damit praktisch ausgeschlossen werden Zeichenketten: Rabin-Karp Algorithmus p. 16/19

Analyse Der eigentliche Algorithmus läuft in O(n + m) = Θ(n + m) Zeichenketten: Rabin-Karp Algorithmus p. 17/19

Analyse Der eigentliche Algorithmus läuft in O(n + m) = Θ(n + m) Mit der Primzahlenerweiterung: O(k (n + m)) Zeichenketten: Rabin-Karp Algorithmus p. 17/19

Analyse Der eigentliche Algorithmus läuft in O(n + m) = Θ(n + m) Mit der Primzahlenerweiterung: O(k (n + m)) Um eine exakte Suche durchzuführen, müssen die Ergebnisse noch zusätzlich getestet werden. Zeichenketten: Rabin-Karp Algorithmus p. 17/19

Analyse Der eigentliche Algorithmus läuft in O(n + m) = Θ(n + m) Mit der Primzahlenerweiterung: O(k (n + m)) Um eine exakte Suche durchzuführen, müssen die Ergebnisse noch zusätzlich getestet werden. Insgesamt also wesentlich schlechter als BMH oder KMP! Sie laufen sogar in sublinearer Zeit und sind exakt Zeichenketten: Rabin-Karp Algorithmus p. 17/19

Analyse Der eigentliche Algorithmus läuft in O(n + m) = Θ(n + m) Mit der Primzahlenerweiterung: O(k (n + m)) Um eine exakte Suche durchzuführen, müssen die Ergebnisse noch zusätzlich getestet werden. Insgesamt also wesentlich schlechter als BMH oder KMP! Sie laufen sogar in sublinearer Zeit und sind exakt Allerdings kann zu jeder Eingabe eine treffende Aussage über das Verhalten gemacht werden Zeichenketten: Rabin-Karp Algorithmus p. 17/19

Demonstration Und nun das Ganze in Action..! Zeichenketten: Rabin-Karp Algorithmus p. 18/19

Literatur D. Gusfield: Algorithms On Strings, Trees And Sequences Cambridge University Press, 1997 R. Karp / M. Rabin: Effizient Randomized Pattern-Matching Algorithms Journal of Res. and Dev., 1987 T. H. Cormen: Introduction to Algorithms The MIT Press, 1990 Zeichenketten: Rabin-Karp Algorithmus p. 19/19