Suffix Trees

Werbung
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
Herunterladen