Konstruktion von Suffixarrays in linearer Zeit

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

Algorithmentheorie 08 – Dynamische Programmierung (1)
Informatik II: Algorithmen und Datenstrukturen SS 2013
DNA-Array oder DNA-Chip
Algorithmen und Komplexität Teil 1: Grundlegende Algorithmen
Sortieren I - Bubblesort -
Das LCA – Problem in Suffixbäumen
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten KMP, BM.
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
Kapitel 6: Klassifizierung von Sortiertechniken
Suche in Texten (Stringsuche )
3. Kapitel: Komplexität und Komplexitätsklassen
5. Sortier-Algorithmen Vorbemerkungen:
Zeitliches probabilistisches Schließen
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (23 – Sortieren vorsortierter Daten) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Halbzeit: Kurze Wiederholung
Sortieren vorsortierter Daten
Bestimmung des Next-Arrays im KMP-Algorithmus
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen 09 - Weitere Sortierverfahren Heapsort-Nachtrag Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27-Selbstanordnende lineare Listen) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 - AVL-Bäume: Entfernen, Bruder-Bäume) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 16 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Algorithmen und Komplexität Teil 1: Grundlegende.
Diskrete Mathematik I Vorlesung 9b AVL-Baum, Algorithmen.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II Vorlesung In welcher Masche liegt der Punkt p?
Externe Datenstruktur lineare Liste
High Performance = Innovative Computer Systems + Efficient Algorithms Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen.
Vortrag: Ingo Gensch, Mathias Reich am:
Hauptseminar Automaten und Formale Sprachen
Ideen der Informatik Suchen und Sortieren [Ordnung muss sein…]
Effiziente Algorithmen
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Computational Thinking Suchen und Sortieren [Ordnung muss sein…]
Algorithmen Gruppe 4.
Effiziente Algorithmen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II Vorlesung 7 SS 2000 Punkt-in-Polygon-Verfahren I (Trapezkarte)
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Effiziente Algorithmen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Mala Bachmann, Beispiel Velorennen Velorennen mit 5 TeilnehmerInnen Wie kann die durchschnittliche Rennzeit berechnet werden?
Mala Bachmann, Beispiel Velorennen (1) Velorennen mit 5 TeilnehmerInnen Wie kann die durchschnittliche Rennzeit berechnet werden?
Komplexität von Algorithmen
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Informatik III Christian Schindelhauer Wintersemester 2006/07
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation III Vorlesung 1 WS 2001/02 Punkt-in-Landkarte I (Streifenkarte)
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II 6. Sem. Vorlesung Mai 2000 Konstruktion des Voronoi-Diagramms.
Sortiernetzwerke1 Seminar über Algorithmen SS 2005 von Arash Sarkohi und Christian Bunse.
Anfang Präsentation 3. November, 2004 Tarjan’s Schleifenaufbrechalgorithmus In dieser Vorlesung wird ein Verfahren vorgestellt, welches in der Lage ist,
Gliederung der Vorlesung
Binärbäume.
Programmiersprachen II Fortsetzung Datenstrukturen Hashing Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 3 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Suchen und Sortieren.
Vorlesung AVL-Bäume/Algorithmen-
Vorlesung AVL-Bäume/Algorithmen-
 Präsentation transkript:

Konstruktion von Suffixarrays in linearer Zeit Vortrag im Seminar „Mehr Algorithmische Bioinformatik“ von Marek Karadžić SS 2005 Leiter: Prof. Dr. Ulf Leser und Dipl.-Inf. Jörg Hakenberg

Suffixarrays in linearer Zeit Überblick Kurze Wiederholung Suffixtrees und –arrays Algorithmus von Manber und Myers Beispiel Komplexität Skew-Algorithmus 06.07.2005 Suffixarrays in linearer Zeit

Zur Erinnerung.. Suffixtrees Exaktes Stringmatching für ein Template und viele Pattern T möglichst clever vorverarbeiten Gut für Datenbankanfragen Naive Konstruktion von Suffixtrees in O(m²); mit Ukkonen in O(m) Schwierigkeiten: Konstruktion schlecht auf Sekundärspeichern (Lokalität) Naive Konstruktion zu langsam Ukkonen ist speicherintensiv; aber typische Anwendungen arbeiten im Hauptspeicher Abhilfe: Suffixarrays 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Für einen String s ist A ein Integerarray der Länge |s|, wobei A[i] die Startposition des i-ten, lexikographisch sortierten Suffix von s enthält. Konstruktion aus Suffixtrees in O(m) mit Depth-First-Search Beispiel: A[1] = 9 $ A[2] = 4 AKIRI$ A[3] = 2 ARAKIRI$ A[4] = 1 HARAKIRI$ A[5] = 8 I$ A[6] = 6 IRI$ A[7] = 5 KIRI$ A[8] = 3 RAKIRI$ A[9] = 7 RI$ 123456789 s = HARAKIRI$ 06.07.2005 Suffixarrays in linearer Zeit

Algorithmus von Manber und Myers 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Der Algorithmus Gegeben ein String s und leeres Array A Array mit allen Suffixen von s, der Länge nach absteigend, initialisieren: A[i] = n +1 – i für i = 0..n Mit Bucket-Sort nach dem ersten Zeichen sortieren Sortieren nach den nächsten Zeichen: si = si … sn$ und sj = sj … sn$ sind zwei Wörter eines Buckets Für das zweite Zeichen: si+1 mit sj+1 vergleichen Danach werden das dritte und vierte Zeichen verglichen, also si+2si+3 mit sj+2sj+3 Die Anzahl der Zeichen, nach denen „verglichen wird“, verdoppelt sich in jedem Schritt: 1, 2, 4, 8, 16, … Folgen Suffixe aufeinander, aufgrund von Suffixen aus verschiedenen Buckets, entsteht eine neue Bucketgrenze Wir sind fertig, wenn jedes Suffix in einem eigenen Bucket ist 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Der Trick Der Vergleich wurde schon implizit im vorherigen Schritt gemacht Für das zweite Zeichen ist es dasselbe Ergebnis wie das beim Vergleich von si+1 = si+1 … sn$ mit sj+1 = sj+1 … sn$, also: In jedem Bucket wird si, nach der Sortierung von si+1 nach dem ersten Zeichen, angeordnet Dafür gehen wir durch das mit Bucket-Sort sortierte Array und schieben den Index j -1, wenn A[i] = j ist, an den Anfang in seinem Bucket Für das dritte und vierte Zeichen ist es dasselbe Ergebnis wie das beim Vergleich von si+2 = si+2 … sn$ mit sj+2 = sj+2 … sn$, also: In jedem Bucket wird si, nach der Sortierung von si+2 nach den ersten beiden Zeichen, angeordnet Dafür gehen wir durch das im vorherigen Schritt sortierte Array und schieben den Index j -2, wenn A[i] = j ist, an den Anfang in seinem Bucket 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Beispiel Array mit allen Suffixen von s in absteigender Reihenfolge initialisieren: A[i] = n +1 – i für i = 0..n s = MISSISSIPPI$ A[0] = 1 MISSISSIPPI$ A[1] = 2 ISSISSIPPI$ A[2] = 3 SSISSIPPI$ A[3] = 4 SISSIPPI$ A[4] = 5 ISSIPPI$ A[5] = 6 SSIPPI$ A[6] = 7 SIPPI$ A[7] = 8 IPPI$ A[8] = 9 PPI$ A[9] = 10 PI$ A[10] = 11 I$ A[11] = 12 $ 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Beispiel II Mit Bucket-Sort nach dem ersten Zeichen sortieren 123456789012 MISSISSIPPI$ $ I ISSISSIPPI$ ISSIPPI$ IPPI$ I$ M MISSISSIPPI$ P PPI$ PI$ S SSISSIPPI$ SISSIPPI$ SSIPPI$ SIPPI$ $ I M P S A 12 2 5 8 11 1 9 10 3 4 6 7 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Beispiel III A 0 12 1 2 3 4 2 5 8 11 5 1 6 7 9 10 8 9 10 11 3 4 6 7 12 2 5 8 11 1 9 10 3 4 6 7 11 11 8 11 8 2 11 8 2 5 1 10 10 9 4 4 7 4 7 3 4 7 3 6 12 11 8 2 5 10 9 4 7 3 6 $ I I I I $ P S S P S S M I S P P I P $ I S S S S I I S S S P I I In jedem Bucket wird si, nach der Sortierung von si+1 nach dem ersten Zeichen, angeordnet. Dafür gehen wir durch das mit Bucket-Sort sortierte Array und schieben den Index j -1, wenn A[i] = j ist, an den Anfang in seinem Bucket. Folgen Suffixe aufeinander, aufgrund von Suffixen aus verschiedenen Buckets, entsteht eine neue Bucketgrenze. 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Beispiel IV A 0 12 1 11 2 8 3 4 2 5 5 1 6 10 7 9 8 9 4 7 10 11 3 6 12 11 8 2 5 1 10 9 4 7 3 6 8 2 2 5 1 10 9 7 7 4 6 6 3 12 11 2 5 7 4 6 3 $ I $ I P P I $ I I S S S S I I S P M I S S I P I $ P P I $ S S I I P S P S I I S S S S I I P S P S In jedem Bucket wird si, nach der Sortierung von si+2 nach den ersten beiden Zeichen, Angeordnet. Dafür gehen wir durch das im vorherigen Schritt sortierte Array und schieben den Index j -2, wenn A[i] = j ist, an den Anfang in seinem Bucket 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Komplexität Die Größe des Alphabets ist n, also gibt es höchstens n Buckets Die Verdopplung der Anzahl der Zeichen nach denen sortiert wird, führt zu log(n) Also hat der Algorithmus im schlimmsten Fall eine Laufzeit von O(n · log(n)) Im besten Fall nur O(n)! Worst case kann auf O(n · loglog(n)) reduziert werden 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Skew-Algorithmus 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Gut zu wissen 2003 von J. Kärkkäinen und P. Sanders vorgestellt Erster Algorithmus der nur O(n) braucht Im selben Jahr wurden noch zwei weitere Algorithmen zur linearen Konstruktion veröffentlicht P. Ko und A. Aluru D.K. Kim, J.S. Sim, H. Park, K. Park (?) 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Der Algorithmus 0) String s = s0 · · · sn-1 1) s[n] = s[n + 1] = s[n + 2] = $; $ kommt in s nicht vor und ist kleinstes Zeichen im Alphabet 2) Tripel von s bilden (si · si+1 · si+2) mit Startposition i mod 3 ≠ 0 3) Tripel werden mit Radix Sort (lexikographisch) sortiert, Ergebnis in einem Array A12 speichern 4) Jedes Tripel erhält einen lexikographischen Namen. Dazu werden die sortierten Tripel in aufsteigender Reihenfolge durchnummeriert, wobei gleiche Tripel auch gleiche Nummern bekommen. 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Der Algorithmus II 5) Wir erhalten eine neue Zeichenreihe s(1) bzw. s(2), indem wir für das Teilwort bzw. alle Tripel mit i mod 3 = 1 bzw. i mod 3 = 2 durch ihre Nummer ersetzen. Mit s(1) · s(2) erzeugen wir die Zeichenreihe s12. 6) Schritte 2 - 5 solange mit s12 · 0 rekursiv aufrufen, bis jedes Tripel einen eindeutigen lexikographischen Namen hat 7) Tripel mit i mod 3 = 0 mittels A12 anordnen (denn si+1 mit (i + 1) mod 3 = 1 ist uns bekannt) und mit Radix Sort nach s[i] sortieren; Ergebnis in A0 speichern 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Der Algorithmus III 8) Mische A0 und A12, dabei gilt, wenn wir si mit sj mit i mod 3 = 0 und j mod 3 = [1, 2] vergleichen: Fall 1: Ist j mod 3 = 1, dann gilt: si = si · si+1, wobei (i + 1) mod 3 = 1 sj = sj · sj+1, wobei (j + 1) mod 3 = 2 Wir vergleichen si mit sj, bei Gleichheit Ergebnis aus A12 ablesen Fall 2: Ist j mod 3 = 2, dann gilt: si = si · si+1 · si+2, wobei (i + 2) mod 3 = 2 sj = sj · sj+1 · sj+2, wobei (j + 2) mod 3 = 1 Wir vergleichen si mit sj, bei Gleichheit auch si+1 mit sj+1. Sind beide gleich, lesen wir das Ergebnis wieder aus A12 ab 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Beispiel s = MISSISSIPPI 1) Dummy-Tripel dranhängen s = MISSISSIPPI$$$ 2) Tripel von s mit i mod 3 ≠ 0 bilden 11 012345678901 MISSISSIPPI$$$ i mod 3 = 1 i mod 3 = 2 ISS IPP I$$ SSI PPI $$$ POS 1 4 7 10 2 5 8 11 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Beispiel II 3) Radix Sort Von: ISS ISS IPP I$$ SSI SSI PPI $$$ Sortieren nach r.Z.: Sortieren nach m.Z.: $ I P S I$$ $$$ SSI SSI PPI IPP ISS ISS $ I P S I$$ $$$ PPI IPP SSI SSI ISS ISS Ergebnis nach r.Z.: I$$, $$$, SSI, SSI, PPI, IPP, ISS, ISS Ergebnis nach m.Z.: I$$, $$$, PPI, IPP, SSI, SSI, ISS, ISS 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Beispiel III Sortieren nach l.Z.: 4) Lexikographische Namen (ψ) $ I P S $$$ I$$ IPP ISS ISS PPI SSI SSI Ergebnis nach l.Z.: $$$, I$$, IPP, ISS, ISS, PPI, SSI, SSI i mod 3 = 1 i mod 3 = 2 ψ 1 2 3 4 5 6 $$$ I$$ IPP ISS PPI SSI POS 11 10 7 8 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Beispiel IV 5) s12 := s(1) · s(2) 6) Rekursiver Aufruf von s12 · 0 bis ψ eindeutig ist Tripel i mod 3 ≠ 0 bilden: 44326651 POS = 012345678 s12 = 443266510 i mod 3 = 1 i mod 3 = 2 432 665 100 326 651 000 POS 1 4 7 2 5 8 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Beispiel V 6.1) Radix Sort.. 7) Tripel mit i mod 3 = 0 sortieren si+1 mit (i + 1) mod 3 = 1 ist uns durch A12 bekannt, s[i] mit Radix Sort Ergebnis: 000, 100, 326, 432, 651, 665 (= A12) POS = 012345678 s12 = 443266510 Also: 443, 266, 510 Ergebnis: 266, 443, 510 (= A0) 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Beispiel VI 11 012345678901 MISSISSIPPI$$$ 8) Mischen von A0 und A12 mit Hilfe von A12 POS 10 1 8 266 443 510 POS 14 11 7 4 5 2 000 100 326 432 651 665 Fall 1: Ist j mod 3 = 1, dann gilt: si = si · si+1, wobei (i + 1) mod 3 = 1 sj = sj · sj+1, wobei (j + 1) mod 3 = 2 Wir vergleichen si mit sj, bei Gleichheit Ergebnis aus A12 ablesen Fall 2: Ist j mod 3 = 2, dann gilt: si = si · si+1 · si+2, wobei (i + 2) mod 3 = 2 sj = sj · sj+1 · sj+2, wobei (j + 2) mod 3 = 1 Wir vergleichen si mit sj, bei Gleichheit auch si+1 mit sj+1. Sind beide gleich, lesen wir das Ergebnis wieder aus A12 ab Ergebnis: 000,100,266,326,432,443,510,651,665(= A12) 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Beispiel VII 8.1) Das Gleiche nochmal mit den Tripeln i mod 3 = 0 aus dem allerersten Schritt Sortieren mit Radix Sort und A12: Mischen von A0 und A12: 11 012345678901 MISSISSIPPI$$$ Von: MIS, SIS, SIP, PI$ Ergebnis: MIS, PI$, SIP, SIS (= A0) MIS PI$ SIP SIS 0 9 6 3 100,266,326,432,443,510,651,665 $$$ I$$ IPP ISS ISS PPI SSI SSI 11 10 7 4 1 8 5 2 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Beispiel VIII Resultat Suffixarray A: A[0] = 11 $$$ A[1] = 10 I$$ A[2] = 7 IPP I$$ A[3] = 4 ISS IPP I$$ A[4] = 1 ISS ISS IPP I$$ A[5] = 0 MIS SIS SIP PI$ A[6] = 9 PI$ A[7] = 8 PPI $$$ A[8] = 6 SIP PI$ A[9] = 3 SIS SIP PI$ A[10] = 5 SSI PPI $$$ A[11] = 2 SSI SSI PPI $$$ 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Komplexität Für einen String der Länge n ruft sich der Algorithmus rekursiv mit 2/3 * n (Startpositionen mit i mod 3 ≠ 0) auf Danach werden diese 2/3 * n mit den übrigen 1/3 * n Zeichen gemischt, das kostet O(n) Dadurch ergibt sich die Rekursionsgleichung: Da sich der erste Teil zu einer Konstante entwickelt, bleibt der Algorithmus letztendlich linear: T(n) = O(n) 06.07.2005 Suffixarrays in linearer Zeit

Suffixarrays in linearer Zeit Quellen Heun, Volker: Skript zur Vorlesung Algorithmen auf Sequenzen. Version 0.70 (03/2005) Weese, David: Studienarbeit zur Implementierung des Skew-Algorithmus. (05/2005) J. Kärkkäinen, P. Sanders: Simple Linear Work Suffix Array Construction. ICALP'03, Lecture Notes in Computer Science, Vol. 2719, 943-955. (2003) 06.07.2005 Suffixarrays in linearer Zeit

Vielen Dank für die Aufmerksamkeit!