Algorithmische Bioinformatik Suffixbäume Ulf Leser Wissensmanagement in der Bioinformatik Ziele • Perspektivenwechsel: Von Online zu Offline-Stringmatching • Verständnis von Suffix-Bäumen als Datenstruktur • Problem bei der Konstruktion erkennen Ulf Leser: Algorithmische Bioinformatik 2 Inhalt dieser Vorlesung • Einschub: Suche mit regulären Ausdrücken • Suffixbäume – Motivation – Aufbau – Verwendung von Suffixbäumen • Naive Konstruktion Ulf Leser: Algorithmische Bioinformatik 3 Grenzen des linearen Stringmatching • Wir können in linearer Zeit finden – – – – Alle Alle Alle Alle Vorkommen eines Pattern P in einem Template T Vorkommen einer Menge von Pattern in einem Template T Vorkommen eines Pattern P mit Wildcard in einem Template T Vorkommen eines Pattern P mit maximal k Mismatches in T • Zeigen wir nicht • Was können wir nicht mehr in linearer Zeit finden? – Alle Vorkommen eines regulären Ausdrucks R in T – Alle approximativen Vorkommen eines Pattern P in T Ulf Leser: Algorithmische Bioinformatik 4 Suche mit regulären Ausdrücken • Reguläre Ausdrücke – – – – – – „ε“ Leeres Zeichen „|“ „oder“ „()“ Gruppierung „*“ Kleen‘sche Hülle (Es fehlen „+“, „.“, „[]“, zählen, ...) Rekursive Definition wie üblich • Beispiel aus der Bioinformatik – PROSITE: Datenbank für Motive in Proteinsequenzen – Proteindomänen sind funktionale Einheiten in Proteinsequenzen – Beschrieben durch reguläre Ausdrücke • Aber tw. andere Operatoren als die oben genannten Ulf Leser: Algorithmische Bioinformatik 5 Problem • Gegeben: Regulärer Ausdruck R, Template T • Gesucht: Das erste Vorkommen von R in T • Äquivalenz: nichtdeterministischer endlicher Automaten (NEA) – Konstruktion: Siehe Literatur – Beispiel: (d|o|g)((n|o)w)*(c|l|ε)(c|l) – Matched z.B. dnwnwowc, ol, gowll, ... ε d S o g o c w l n Ulf Leser: Algorithmische Bioinformatik c ε ε Z l 6 Definitionen • Definition – Sei R ein regulärer Ausdruck und G(R) der dazugehörige NEA mit Startzustand S und Endzustand Z – Ein Substring T‘ von T matched R, wenn T‘ durch einen Pfad in G(R) von S nach Z ausgesprochen wird • Bemerkungen – Komplexität der Konstruktion von G(R) ist linear – Die Menge aller Strings, die von G(R) akzeptiert werden, bilden die Sprache zu R • Gesucht: Algorithmus, um das erste T‘ in T zu finden, das R matcht – Erweiterung auf alle T‘ machen wir nicht Ulf Leser: Algorithmische Bioinformatik 7 Algorithmusidee • Wir beginnen mit dem leichteren Problem: Matched ein Präfix von T mit R? • Idee – Betrachte G(R) und T von links nach rechts – Aufzählen aller Pfade in G(R) mit aufsteigender Länge, die mit T matchen – Wird Terminal Z gefunden, haben wir einen Match • Erweiterung zu beliebigen Substrings von T? – Betrachte Pattern R‘=„Σ*R“ – Präfix Σ* von R‘ „frisst“ beliebige Präfixe von T Ulf Leser: Algorithmische Bioinformatik 8 Pfadaufzählung • Induktion über Pfadlänge i – Anfang: Sei N(0) die Menge aller Knoten, die von S per beliebig vielen ε-Kanten erreicht werden können. Außerdem sei S∈N(0) – Induktionsschritt • Sei N(i-1) bekannt • N(i) ist die Menge aller Knoten, die von einem Knoten aus N(i-1) erreicht werden durch … – erst genau eine Kante mit Label T[i] – dann beliebig viele (oder keine) ε-Kanten • Enthält N(i) das Terminalsymbol Z, endet im Template T an Position i ein Auftreten von R Ulf Leser: Algorithmische Bioinformatik 9 Beispiel ε d S o o 1 • • 2 w 3 n g c c l ε ε 4 Z l Pattern: (d|o|g)((n|o)w)*(c|l|ε)(c|l) Suche: ol – N(0) = {S} – N(1) = {1,3,4} – N(2) = {4,Z} Success • Suche: dnwnwowc – N(0) = {S} – N(1) = {1,3,4} – N(2) = {2} – N(3) = {3,4,1} – N(4) = {2} dnwnwowc dnwnwowc dnwnwowc dnwnwowc dnwnwowc Ulf Leser: Algorithmische Bioinformatik – – – – N(5) N(6) N(7) N(8) = = = = {3,4,1} {2} {3,4,1} {4,Z} dnwnwowc dnwnwowc dnwnwowc Success 10 Komplexität • Kritisch ist nur der Schritt N(i-1) → N(i) – Sei e die Anzahl von ε-Kanten in G(R) – Match für T[i] finden geht in O(1) (oder O(|Σ|) – Danach können höchstens e ε-Kanten folgen • Wichtig ist nur, welche Zustände wir erreichen können – wie, ist egal • Schranke e gilt für alle Zustände aus N(i-1), die wir weiter verfolgen • Zyklen können abgebrochen werden (braucht etwas Speicher) – Also ist dieser Schritt O(e) • Wir berechnen |T|=m Mengen N(1) ... N(m): O(m*e) • Beobachtung – Ein reg. Ausdruck mit n=|R| Symbolen hat maximal O(n) ε-Kanten – Sonst kann er minimiert werden • Zusammen: O(m*n) Ulf Leser: Algorithmische Bioinformatik 11 Bemerkung • Jeden NEA kann man in einen DEA konvertieren • Ein DEA erlaubt Matchen in linearer Zeit – Wenn wir die Failure Links dazu berechnen • Aber – Linear in der Zahl der Zustände – Der durch Konvertierung erzeugte DEA hat aber im Worst-Case exponentiell viele Zustände • In der Praxis hat er die aber nicht – RegExp matching ist meistens linear Ulf Leser: Algorithmische Bioinformatik 12 Inhalt dieser Vorlesung • Einschub: Suche mit regulären Ausdrücken • Suffixbäume – Motivation – Aufbau – Verwendung von Suffixbäumen • Naive Konstruktion Ulf Leser: Algorithmische Bioinformatik 13 Wo sind wir? • Alle exakten Vorkommen von P in T • Alle exakten Vorkommen einer Menge von P in T • Datenbankformulierung: Alle exakten Vorkommen von P in T, aber man darf T präprozessieren • Später – – – – Approximatives Stringmatching Heuristiken für approximatives Stringmatching in Datenbanken Multiple Sequence Alignment Phylogenetische Algorithmen Ulf Leser: Algorithmische Bioinformatik 14 Problemstellung • Bisherige Algorithmen – Ein Template T (m) und ein oder mehrere Pattern P (n) – Prinzip: Preprocessing von P in O(n), dann Suche in O(m) • Jetzt: Gegeben eine lange Zeichenkette T – Z.B. Komplettes Genom des Menschen • Benutzer schicken ständig neue Pattern P – Z.B. Gene anderer Spezies • T sollte vorverarbeitet werden – Kosten amortisieren sich über viele Suchen – Zählen nicht für die Suche eines Pattern • Eine Lösung: Suffixbäume Ulf Leser: Algorithmische Bioinformatik 15 Motivation: Datenbanksuchen • Solche Suchen sind ein Hauptthemen der Bioinformatik – I.d.R. approximativ – Schnelle Algorithmen für approx. Suchen benutzen (fast) immer ein exaktes Suchverfahren zum Finden aussichtsreicher Regionen • Suffixbäume sind sehr schnell für exakte Suchen – Aber: Speicherplatz, Sekundärspeicherverhalten – Alternative Baumstrukturen: Suffix-Arrays, Enhanced Suffix-Arrays, Burrows-Wheeler-Transformation, … – Andere Alternative: Hashing • Suffixbäume haben viele weitere Anwendungen – Suche nach längsten identischen Subsequenzen – Suche nach längsten Repeats – ... Ulf Leser: Algorithmische Bioinformatik 16 Suffixbäume • Definition Der Suffixbaum T für einen String S mit |S|=m ist ein Baum mit T hat eine Wurzel und m Blätter, markiert mit 1,...,m Jede Kante E ist mit einem Substring label(E)≠∅ von S beschriftet Jeder innere Knoten k hat mindestens 2 Kinder Alle Label der Kanten von einem Knoten k aus beginnen mit unterschiedlichen Zeichen – Sei (k1,k2,...,kn) ein Pfad von der Wurzel zu einem Blatt mit Markierung i. Dann ist die Konkatenation der Label der Kanten auf dem Pfad gleich S[i..m] – – – – Ulf Leser: Algorithmische Bioinformatik 17 Beispiel 1 1234567890 • S= BANANARAMA 10 a ma 9 • Problem: Wohin kommt „AMA“? • Verlängerung von „a“ verboten – 10 sonst kein Blatt • Neue Kante „ama“ verboten – zwei Pfade aus der Wurzel würden sonst mit gleichem Zeichen beginnen Es gibt keinen Suffixbaum für BANANARAMA Problem tritt auf, sobald ein Suffix Präfix eines anderen Suffix ist - Also dauernd • Trick: Wir betrachten „BANANARAMA$“ • „$“ nicht Teil des Alphabets von S Ulf Leser: Algorithmische Bioinformatik 18 Beispiel 2 12345678901 • S= BANANARAMA$ 11 $ a$ ma$ 10 Ulf Leser: Algorithmische Bioinformatik 9 19 Beispiel 2 12345678901 • S= BANANARAMA$ narama$ 11 $ 10 5 $ ma$ narama$ 8 rama$ a ma$ 9 7 rama$ 6 4 Ulf Leser: Algorithmische Bioinformatik 20 Beispiel 3 12345678901 • S= BANANARAMA$ 1 3 bananarama$ narama$ 11 na $ 5 rama$ a $ rama$ ma$ 10 9 7 ma$ na 8 rama$ narama$ 6 2 rama$ 4 Ulf Leser: Algorithmische Bioinformatik 21 Eigenschaften von Suffixbäumen • • • • • Zu jedem String (plus $) gibt es genau einen Suffixbaum Jeder Pfad von Wurzel zu einem Blatt ist eindeutig Jede Verzweigung an einem inneren Knoten ist eindeutig Gleiche Substrings können an mehreren Kanten stehen Suffixbäume und Keyword-Trees – Betrachte alle Suffixe von S als Pattern – Konstruiere den Keyword-Tree – Verschmelze alle Knoten auf einem Pfad ohne Abzweigungen zu einer Kante – Dann haben wir einen Suffixbaum für S – Komplexität? Ulf Leser: Algorithmische Bioinformatik 22 Weitere Beispiele 6 • S= aaaaa$ 5 $ a $ a 4 3 $ a $ a 2 $ a$ 1 • S= abcde$ $ 6 e$ abcde$ de$ 5 4 Ulf Leser: Algorithmische Bioinformatik cde$ bcde$ 3 2 1 23 Inhalt dieser Vorlesung • Einschub: Suche mit regulären Ausdrücken • Suffixbäume – Motivation – Aufbau – Verwendung von Suffixbäumen • Naive Konstruktion Ulf Leser: Algorithmische Bioinformatik 24 Definitionen • Definition Sei T der Suffixbaum für String S+“$“ – Sei p ein Pfad in T von root(T) zu einem Knoten k. Dann ist label(p) die Konkatenation der Label der Kanten auf dem Pfad p – Sei k ein Knoten von T und p der Pfad zu k. Dann ist label(k) = label(p) – Sei k ein Knoten von T. Dann ist depth(k)=|label(k)| Ulf Leser: Algorithmische Bioinformatik 25 Suche mit Suffixbäumen • Intuition – Jedes Vorkommen eines Pattern P muss Präfix eines Suffix sein – Und die haben wir alle auf Pfaden von der Wurzel aus • Gegeben S und P. Finde alle Vorkommen von P in S – Konstruiere den Suffixbaum T zu S+“$“ • Das geht in O(|S|), wie wir sehen werden – Matche P auf einen Pfad in T ab der Wurzel • Wenn das nicht geht, kommt P in S nicht vor • P kann in einem Knoten k enden; merke k • Oder P endet in einem Kantenlabel; sei k der Endknoten dieser Kante – Die Markierungen aller unterhalb von k gelegenen Blätter sind Startpunkte von Vorkommen von P in S Ulf Leser: Algorithmische Bioinformatik 26 Beispiel: bananarama$ 1 3 bananarama$ P = „na“ 11 na $ a $ rama$ ma$ 10 9 7 ma$ 1 na 3 bananarama$ narama$ rama$ 8 rama$ narama$ 11 na $ a $ narama$ rama$ 2 5 rama$ 4 rama$ ma$ 10 9 7 ma$ na 8 rama$ narama$ 6 2 6 P = „an“ rama$ 4 Ulf Leser: Algorithmische Bioinformatik 27 5 Komplexität • Theorem Sei T der Suffixbaum für S+“$“. Die Suche nach allen Vorkommen eines Pattern P, |P|=n, in S ist O(n+k), wenn k die Anzahl Vorkommen von P in S ist. • Beweisidee – P in T matchen kostet O(n) • Pfade sind eindeutig – Entscheidung an jedem Knoten ist klar – Blätter aufsammeln ist O(k) • Baum unterhalb Knoten K hat k Blätter • Wie finde man die O(k)? Ulf Leser: Algorithmische Bioinformatik 28 Längster gemeinsamer Substring • Gegeben zwei Strings S1 und S2 • Gesucht: Längster gemeinsamer Substring s • Vorschläge ? • Lösung • Konstruiere Suffixbaum T für S1$S2% • Streiche aus diesem Baum alle Pfade unterhalb eines „$“ • Durchlaufe den Baum • markiere alle internen Knoten mit 1, wenn im Baum darunter ein Blatt aus S1 kommt • markiere Knoten mit 2, wenn ... Blatt aus S2 vorkommt • Suche den tiefsten Knoten mit Beschriftung 1 und 2 Ulf Leser: Algorithmische Bioinformatik 29 Beispiel • S1=main$, S2=kai% • ... 9 9 main$kai% kai% 1 % 6 ai kai% main$ % 6 ai 1 n$ n$kai% 2 2 i $kai% 5 % % i $ 7 7 n$kai% n$kai% 8 3 Ulf Leser: Algorithmische Bioinformatik n$ n$ % 4 % 4 5 8 3 30 Beispiel 9 kai% 2 main$ % 1 kai% 6 ai 2 n$ main$ % ai 1,2 2 1 n$ n$ 1 % 4 8 1,2 2 n$ n$ % 1 3 % i $ 7 5 n$ % i $ 1 2 1 • Verallgemeinerbar zu n Strings S1,...,Sn Ulf Leser: Algorithmische Bioinformatik 31 Komplexität • Annahme: Wir können T für S in O(|S|) berechnen • Die Schritte – Sei m=|S1|+|S2| – Konstruiere Suffixbaum T für S1$S2% • Ist O(m) nach Annahme – Streiche aus diesem Baum alle Pfade unterhalb eines „$“ • Depth-First Traversal – O(m) – Durchlaufe den Baum und markiere innere Knoten mit 1,2 • Depth-First Traversal – O(m) – Suche den tiefsten Knoten mit Beschriftung 1 und 2 • Breadth-First Traversal – O(m) • Zusammen: O(m) Ulf Leser: Algorithmische Bioinformatik 32 Längstes „Palindrom“ • Gegeben String S. • Finde den längsten Substring s, der sowohl vorwärts als auch rückwärts in S vorkommt • Ideen ? • Lösung • Suche längsten gemeinsamen Substring für S und reverse(S) Ulf Leser: Algorithmische Bioinformatik 33 Weitere Anwendungen • A. Apostolico: „The myriad virtues of subword trees, in: Combinatorial Algorithms on Words“, 1985 Ulf Leser: Algorithmische Bioinformatik 34 Inhalt dieser Vorlesung • Einschub: Suche mit regulären Ausdrücken • Suffixbäume – Motivation – Aufbau – Verwendung von Suffixbäumen • Naive Konstruktion Ulf Leser: Algorithmische Bioinformatik 35 Naive Konstruktion von Suffixbäumen • Gesucht: Suffixbaum T für String S • Start: Bilde Baum T0 mit Wurzelknoten und einer Kante mit Label „S$“ zu einem Blatt mit Markierung 1 • Konstruiere Ti+1 aus Ti wie folgt – Betrachte das Suffix Si+1 = S[i+1..]$ – Matche Si+1 in Ti so weit wie möglich – Schließlich muss es einen Mismatch geben • Alle bisher eingefügten Suffixe sind länger als Si+1, also wird $ nie mit $ matchen • $ kommt sonst nicht in S vor – Folgendes kann passieren ... Ulf Leser: Algorithmische Bioinformatik 36 Naive Konstruktion von Suffixbäumen 2 • Konstruiere Ti+1 aus Ti wie folgt ... 1. Si+1 matched bis auf $; Mismatch auf einer Kante n an Position j • Füge in n an Position j einen neuen Knoten k ein • Erzeuge Kante von k zu neuen Blatt k‘; beschrifte die Kante mit „$“ • Markiere k‘ mit i+1 2. Si+1 matched bis auf $; Mismatch am Ende einer Kante n • Sei k der Zielknoten von n • Erzeuge Kante von k zu neuen Blatt k‘; beschrifte die Kante mit „$“ • Markiere k‘ mit i+1 3. Mismatch vor $ auf einer Kante n an Position j des Labels; der Mismatch in Si+1 sei an Position j‘<|Si+1| • Füge in n an Position j einen neuen Knoten k ein • Erzeuge Kante von k zu neuen Blatt k‘; beschrifte Kante mit „S[j‘..]$“ • Markiere k‘ mit i+1 Ulf Leser: Algorithmische Bioinformatik 37 Beispiel • „barbapapa“ • ... Ulf Leser: Algorithmische Bioinformatik 38 Komplexität • Komplexität? – Jeder Schritt von Ti zu Ti+1 ist O(m) – Es gibt m-1 solche Schritte – Zusammen: O(m2) • Nächstes Thema: O(m) Algorithmus von Ukkonen Ulf Leser: Algorithmische Bioinformatik 39 Selbsttest • Wir kann man die k Blätter unterhalb eines Baumknoten p in einem Suffixbaum in O(k) erreichen? • Naiver Konstruktionsalgorithmus für Suffixbäume und dessen Komplexität? • Wie kann man in O(|P|) zeigen, ob P in einem String S enthalten ist (mit Präprozessierung) • Wie kann man das in quasi O(k) erreichen, wenn n=|P| fest ist? Ulf Leser: Algorithmische Bioinformatik 40