algorithmen und datenstrukturen 2 - 4. seminardominic/stuff/teaching/... · boyer-moore algorithmus...
TRANSCRIPT
Algorithmen und Datenstrukturen 2
- 4. Seminar -
Dominic RoseBioinformatics Group, University of Leipzig
Sommersemster 2010
Outline
4. Ubungsserie: 3 Aufgaben, insgesamt 28 Punkte
A10 Suffix Trees (12 Punkte)
A11 “Substrings” (6 Punkte)
A12 Knuth-Morris-Pratt, Boyer-Moore (10 Punkte)
→ http://www.bioinf.uni-leipzig.de/∼dominic
Wiederholung: Suffix Trees
• Vielseitig einsetzbare Indexstruktur (Stringverarbeitung)
• Prinzip: Abspeichern aller Suffixe eines Strings, damitimplizit alle Substrings
• Kodieren der Struktur der Ausgangsdaten,Zusammenfassen wiederholter Strukturen, Generalisierungder Ausgangsdaten.
• Kann in linearer Zeit aufgebaut werden (Weiner 1973,McCreight 1976, Ukkonen 1995)
• Anwendungen: z. B. Pattern Matching:“Ist Anfrage-Pattern P in String S (Datenbank)enthalten? Wenn ja, wo? Oder wie oft?” → EffizienteBerechnung aller Vorkommen von P in S .
Wiederholung: Suffix Trees
• Beispiel:S = abab$
01234(Datenbank)
• Anfragen: P1 = baa, P2 = ab“Vorkommen von P in S‘”
• Suffixe von S: abab$, bab$, ab$, b$, $.
Wiederholung: Suffix Trees
• Beispiel:S = abab$
01234(Datenbank)
• Anfragen: P1 = baa, P2 = ab“Vorkommen von P in S‘”
• Suffixe von S: abab$, bab$, ab$, b$, $.
Wiederholung: Suffix Trees
• Beispiel:S = abab$
01234(Datenbank)
• Anfragen: P1 = baa, P2 = ab“Vorkommen von P in S‘”
• Suffixe von S: abab$, bab$, ab$, b$, $.
Wiederholung: Suffix Trees
• Beispiel:S = abab$
01234(Datenbank)
• Anfragen: P1 = baa“Vorkommen von P in S‘”
• Suffixe von S: abab$, bab$, ab$, b$, $.
→ P1 wird nicht gefunden.
Wiederholung: Suffix Trees
• Beispiel:S = abab$
01234(Datenbank)
• Anfragen: P2 = ab“Vorkommen von P in S‘”
• Suffixe von S: abab$, bab$, ab$, b$, $.
→ P2 wird gefunden: 0, 2
Wiederholung: Suffix Trees
Sei S ein String der Lange |S | = n uber Alphabet A. DerSuffix Tree ST von S$ hat die folgenden Eigenschaften:
• ST hat n + 1 Blatter, entsprechend der Suffixe von S$.
• Jeder Knoten in ST kann hochstens |A|+ 1 Kinder haben, dajedes Kind mit einem unterschiedlichen Buchstaben beginnt.
• Jeder innere Knoten hat mindestens 2 Kinder
• Speicherplatz: O(n)
• Suche von Muster der Lange m: O(m), meist m <<< n
• Durch $ gewinnen wir “Eindeutigkeit”. Ohne $ konnte einSuffix bereits durch innere Knoten dargestellt werden.
Wiederholung: Suffix Trees
Konstruktion, Beispiel: xabxac$
Wiederholung: Suffix TreesKonstruktion, Beispiel: xabxac$
Wiederholung: Suffix Trees
Ubung: geg. S = MISSISSIPPI$, ges. ST(S) (Freiwillige? *g*)
Wiederholung: Suffix Trees
Ubung: geg. S = MISSISSIPPI$, ges. ST(S) (Freiwillige? *g*)
Aufgabe 10 - 12 Punkte
• Suffixbaum fur den String banana$
• Mittels naiver Konstruktionsmethode
• Abfolge aller Funktionsaufrufe (addLeaf, insertEdge,getlcp) innerhalb von topdown
• Rekursionsstufen durch Einruckungen verdeutlichen
• Baum zeichnen
Aufgabe 10 - Losung
U := {(banana$, 0), (anana$, 1), (nana$, 2), (ana$, 3), (na$, 4), (a$, 5), ($, 6)}
• Pa = {(nana$, 1), (na, 3), ($, 5)}, getlcp(Pa) = 0
• Pn = {(ana$, 1), (a$, 3)}, getlcp(Pn) = 1
• Pn = {a$, 1} −→ addLeaf (α3, na$, 1)
• P$ = {ε, 3)} −→ addLeaf (α3, $, 3)
• −→ insertEdge(α2, na, α3)
• P$ = {($, 5)} −→ addLeaf (α2, $, 5)
• −→ insertEdge(α1, a, α2)
• Pb = {(anana$, 0)},−→ addLeaf (α1, $, 0)
• Pn = {(ana$, 2), (a$, 4)}, getlcp(Pn) = 1
• Pn = {(a$, 2)},−→ addLeaf (α4, na$, 2)
• P$ = {ε, 4} −→ addLeaf (α4, $, 4)
• −→ insertEdge(α1, na, α4)
• P$ = {(ε, 6)},−→ addLeaf (α1, $, 6)
Aufgabe 10 - Losung
Aufgabe 11 - 6 Punkte
Fur einen beliebigen String s endlicher Lange bezeichnen wirmit Sub(s) die Menge aller Substrings von s.
(a) Zeigen Sie, dass es zu jeder naturlichen Zahl n einAlphabet A und einen String s der Lange n uber demAlphabet A gibt, so dass
| Sub(s)| = n(n + 1)/2 .
(3 Punkte)
Aufgabe 11a - Losung• Wahle das Alphabet A = {1, 2, . . . , n} und
s[ ] = 1 2 3 . . . n.• Betrachte die Menge von Indexpaaren
I := {(i , j) : 1 ≤ i ≤ j ≤ n}.• Fur (i , j) ∈ I und (k , l) ∈ I impliziert (i , j) 6= (k , l), dass
s[i . . . j ] 6= s[k . . . l ]. (Die beiden Substrings unterscheidensich im ersten oder im letzten Zeichen).
• Somit haben wir eine injektive Abbildung von I aufSub(s) gefunden.
• Andererseits ist diese Abbildung nach Konstruktionsurjektiv, es werden also alle Substrings getroffen.
• Wir finden also
| Sub(s)| = |I | =n∑
i=1
i =n(n + 1)
2.
Aufgabe 11b
(b) Seien A und B Alphabete mit A ∩ B = ∅. Seien s einString uber A und t ein String uber B. Betrachten Sienun die Konkatenation st, die ein String uber demAlphabet A ∪ B ist. Wie konnen Sie | Sub(st)| aus |s|,|t|, | Sub(s)| und | Sub(t)| berechnen? Begrunden SieIhre Antwort. (3 Punkte)
Aufgabe 11b - Losung
| Sub(st)| = | Sub(s)|+ | Sub(t)|+ |s| × |t|
• | Sub(s)| zahlt Substrings von st, die ganz in s liegen.
• | Sub(t)| diejenigen, die ganz in t liegen.
• Da die Alphabete disjunkt sind, sind diese Mengenebenfalls disjunkt.
• Die restlichen Substrings von st beginnen in s und endenin t, sind also durch die Wahl einer von |s|Anfangspositionen und einer von |t| Endpositioneneineindeutig bestimmt.
Wiederholung: Textsuche
• Nachteil des naiven Ansatzes (Muster an jeder Positiondes Textes anlegen), dass bei jedem Mismatch alleZeichen, die bis dahin schon ubereingestimmt haben,wieder vergessen werden und man von vorne anfangt zuvergleichen.
• Suffix Trees bei haufigen Anfragen sinnvoll, sonst evtl.relativ grosser Overhead.
• Verschied. Algorithmen, z. B. Knuth-Morris-Pratt,Boyer-Moore
Wiederholung: Textsuche
Vorlauf: Sei Pattern P = abacab.
• Die echten Prafixe von P sind:ε, a, ab, aba, abac, abaca
• Die echten Suffixe von P sindε, b, ab, cab, acab, bacab
• “Rander” (Prafixe die gleichzeitig Suffixe sind) von Psind ε, ab
• Der Rand ab hat die “Breite” 2.
• i sei Position im Text, j Position im Pattern
Wiederholung: KMP
“Rander” verraten uns die Schiebedistanz beimKnuth-Morris-Pratt Algorithmus:
• Die Zeichen an Positionen 0 bis 4 haben ubereingestimmt.
• Der Vergleich c-d an Position 5 ergibt einen Mismatch.
• Das Pattern kann bis Position 3 weitergeschoben werden,und der Vergleich wird ab Position 5 des Textesfortgesetzt.
• Wie weit verschiebt man das Pattern grundsatzlich?
Wiederholung: KMP
• Die Schiebedistanz richtet sich nach dem breitesten Randdes “ubereinstimmenden Prafixes” des Patterns.
• In diesem Beispiel matchen wir abcab; Lange j = 5.
• Sein breitester Rand ist ab mit der Breite b = 2. DieSchiebedistanz betragt j − b = 5− 2 = 3.
Wiederholung: KMP
Wiederholung: KMP
“next”-Tabelle: nachste zu prufende Position des Musters.
Beispiel: P = ababaa
j = 0 1 2 3 4 5 oder 1 2 3 4 5 6
p[j] = a b a b a a a b a b a a
next[j] = -1 0 0 1 2 3 0 1 1 2 3 4
Aufgabe12a - 4 Punkte
Gegeben sind der Text
x [ ] = AMMONIUMNITRATKRATERKAMMER
und die Muster
y1[ ] = MAMA, y2[ ] = AMME .
• Knuth-Morris-Pratt anwenden, um y1 in x zu suchen.
• next-Tabelle fur y1 angeben.
• Suchverlauf beschreiben, Paare (i , j) auftragen, wie in VL.
• Wieviele Vergleiche zwischen Text und Muster werdenausgefuhrt? (4 Punkte)
KMP pseudocode
j=1; i=1;
while(i<=n) {
if( q[j] == t[i]) {
if(j==m) return i-m+1; /* match */
j++; i++;
}
else {
if(j>1) j = next[j];
else i++;
}
}
return -1 /* mismatch */
Aufgabe 12a - 4 Punkte
j 1 2 3 4
q[j] M A M A
next[j] 0 1 1 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
A M M O N I U M N I T R A T K R A T E R K A M M E R
M A M A M A M A
M A M A M A M A
M A M A M A M A
M A M A M A M A
M A M A M A M A
M A M A M A M A
M A M A M A M A
M A M A M A M A
M A M A M A M A
M A M A M A M A
M A M A M A M
M A M A M A
M A M A M
31 Vergleiche
Aufgabe 12a - 4 Punkte
Zusatz: y2 in x
j 1 2 3 4
q[j] A M M E
next[j] 0 1 1 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
A M M O N I U M N I T R A T K R A T E R K A M M E R
A M M E A M M E
A M M E A M M E
A M M E A M M E
A M M E A M M E
A M M E A M M E
A M M E A M M E
A M M E A M M E
A M M E A M M E
A M M E A M M E
A M M E A M M E
28 Vergleiche
Zusatz: y2 in x
Boyer-Moore Algorithmus
• Muster wird von rechts nach links mit Text verglichen
• Scheitert der erste Vergleich (d-c) und kommt das ersteTextzeichen (d) nicht nochmal im Muster vor, so kann dasMuster direkt hinter dieses Zeichen geschoben werden:
Boyer-Moore Algorithmus
• Diese Strategie nennt man “bad character heuristic”
• Auch anwendbar, wenn Textzeichen (b) bei mismatch(b-c) im Muster vorkommt, dann kann das Muster abernicht sofort hinter “sich” geschoben werden, sondern nurbis zum letzten Vorkommen des Zeichens (b) im Muster.
Boyer-Moore Algorithmus
• “Bad character” nicht immer optimal.
• Siehe Beispiel: Mismatch a-b, Ausrichten von Textzeichena am letzten a des Musters wurde negative Verschiebungbewirken.
• Lieber um 1 weiter nach rechts schieben, noch besser:
• “good suffix heuristics”: Richte bereits ubereinstimmendeSuffixe aneinander aus (hier: Verschieben um 2).
• Boyer-Moore verfolgt eigentl. beide Strategien, also BCund GS, aber BM in VL “nur” mit BC eingefuhrt
Aufgabe 12b - 6 Punktey1 in x suchen:
0 1 2 3 last-Tabelle also: A M sonst
M A M A 3 2 -1
-------------------
i=1;
while(i<=n-m) {
j=m;
while( (j>=1)&&(q[j]==t[i+j-1]) ) j--;
if(j<1) return i; /* match */
else i = (i+j-1)-last[t[i+j-1]];
}
return -1; /* mismatch */
-------------------
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
A M M O N I U M N I T R A T K R A T E R K A M M E R
M A M A
M A M A
M A M A
M A M A
M A M A
M A M A
M A M A
also i=1,5,6,10,13,17,21,22 M A M A
Aufgabe 12b - 6 Punktey2 in x suchen:
0 1 2 3 last-Tabelle also: A E M sonst
A M M E 0 3 2 -1
-------------------
i=1;
while(i<=n-m) {
j=m;
while( (j>=1)&&(q[j]==t[i+j-1]) ) j--;
if(j<1) return i; /* match */
else i = (i+j-1)-last[t[i+j-1]];
}
return -1; /* mismatch */
-------------------
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
A M M O N I U M N I T R A T K R A T E R K A M M E R
A M M E
A M M E
A M M E
A M M E
A M M E
A M M E
A M M E
also i=1,5,6,10,13,17,21,22 A M M E