algorithmen und datenstrukturen 2 - 4. seminardominic/stuff/teaching/... · boyer-moore algorithmus...

37
Algorithmen und Datenstrukturen 2 - 4. Seminar - Dominic Rose Bioinformatics Group, University of Leipzig Sommersemster 2010

Upload: others

Post on 09-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

Algorithmen und Datenstrukturen 2

- 4. Seminar -

Dominic RoseBioinformatics Group, University of Leipzig

Sommersemster 2010

Page 2: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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

Page 3: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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 .

Page 4: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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$, $.

Page 5: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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$, $.

Page 6: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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$, $.

Page 7: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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.

Page 8: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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

Page 9: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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.

Page 10: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

Wiederholung: Suffix Trees

Konstruktion, Beispiel: xabxac$

Page 11: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

Wiederholung: Suffix TreesKonstruktion, Beispiel: xabxac$

Page 12: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

Wiederholung: Suffix Trees

Ubung: geg. S = MISSISSIPPI$, ges. ST(S) (Freiwillige? *g*)

Page 13: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

Wiederholung: Suffix Trees

Ubung: geg. S = MISSISSIPPI$, ges. ST(S) (Freiwillige? *g*)

Page 14: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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

Page 15: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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)

Page 16: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

Aufgabe 10 - Losung

Page 17: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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)

Page 18: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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.

Page 19: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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)

Page 20: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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.

Page 21: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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

Page 22: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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

Page 23: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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?

Page 24: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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.

Page 25: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

Wiederholung: KMP

Page 26: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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

Page 27: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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)

Page 28: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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 */

Page 29: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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

Page 30: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

Aufgabe 12a - 4 Punkte

Page 31: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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

Page 32: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

Zusatz: y2 in x

Page 33: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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:

Page 34: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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.

Page 35: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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

Page 36: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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

Page 37: Algorithmen und Datenstrukturen 2 - 4. Seminardominic/stuff/teaching/... · Boyer-Moore Algorithmus \Bad character"nicht immer optimal. Siehe Beispiel: Mismatch a-b, Ausrichten von

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