Bezeichnungen. Arten von String-Matching-Problemen

4. Textalgorithmen String Matching 4. Textalgorithmen 4. Textalgorithmen String Matching Welche Stellen in einem Text stimmen mit einem Muster bi...
0 downloads 2 Views 204KB Size
4. Textalgorithmen

String Matching

4. Textalgorithmen

4. Textalgorithmen

String Matching

Welche Stellen in einem Text stimmen mit einem Muster bis auf d Fehler uberein ¨ (Distance-Match-Anfrage)? Beispiel: agrep

Die Suche von einem Muster in einem Text wird auch als String Matching oder Pattern Matching bezeichnet.

Editierdistanz: Wie kann man am “gunstigsten” ¨ einen String s in einen String t uberf ¨ uhren? ¨ Beispiel: diff

Generell besteht die Aufgabe darin,

Wo braucht man String-Matching-Verfahren? Z.B.:

¨ • einen String (das Muster, Pattern) der Lange m

• Volltextdatenbanken, Retrievalsysteme, Suchmaschinen

¨ • in einem Text der Lange n zu finden,

• Bioinformatik

wobei n > m gilt. Je nach Freiheitsgraden bei der Suche unterscheidet man verschiedene Arten von String-Matching-Problemen. Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

158

String Matching

☞ In diesem Abschnitt lernen wir effziente Algorithmen fur ¨ exaktes String-Matching kennen.

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

160

String Matching

Arten von String-Matching-Problemen

Bezeichnungen

Exaktes String-Matching: Wo tritt ein String pat in einem Text text auf? Beispiel: fgrep

• Ein Alphabet Σ ist eine endliche Menge von Symbolen. |Σ| bezeich¨ von Σ. net die Kardinalitat

Matching von Wortmengen: Gegeben sei eine Menge S von Strings. Wo tritt in einem Text ein String aus S auf? Beispiel: agrep

• Ein String (Zeichenkette, Wort) s uber ¨ einem Alphabet Σ ist eine end¨ liche Folge von Symbolen aus Σ. |s| bezeichnet die Lange von s.

¨ Matching regularer Ausdrucke: ¨ Welche Stellen in einem Text passen ¨ auf einen regularen Ausdruck? Beispiel: grep, egrep

•  bezeichnet den leeren String.

Approximatives String-Matching: Welche Stellen in einem Text passen am besten auf ein Muster (Best-Match-Anfrage)? Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

159

• Wenn x und y Strings sind, dann bezeichnet xy die Konkatenation von x und y.

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

161

4. Textalgorithmen

String Matching

4. Textalgorithmen

• s[i] bezeichnet das i-te Element eines Strings s (1 ≤ i ≤ |s|).

String Matching

Exaktes String-Matching

s[i . . . j] bezeichnet den String s[i]s[i + 1] . . . s[j]. Fur ¨ i > j gelte s[i . . . j] = . • Fur ¨ einen String s (mit m = |s|) bezeichnet sR die Umkehrung s[m]s[m − 1] · · · s[1] von s.

Problem 4.1. [Exaktes String-Matching] Gegeben sind die Strings pat und text. (a) Man bestimme, ob pat ein Substring von text ist.

• Fur ¨ zwei String x und y gilt x = y genau dann, wenn |x| = |y| = m und x[i] = y[i] fur ¨ alle 1 ≤ i ≤ m gilt.

(b) Man bestimme die Menge aller Positionen, an denen pat in text auftritt. Diese Menge wird mit M AT CH(pat, text) bezeichnet. • Im folgenden wird nur die Variante (a) von Problem 4.1 betrachtet.

¨ • Wenn ω = xyz ein String ist, dann ist x ein Prafix und z ein Suffix von ω. ¨ (echter Suffix) von Gilt ω 6= x (ω 6= z), dann ist x (z) ein echter Prafix ω. Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

162

String Matching

• Ein String x (mit m = |x|) heißt Substring (Faktor) von y, wenn ein i existiert mit x = y[i . . . i + m − 1]. Andere Sprechweisen: x tritt in y an Position i auf bzw. Position i ist ein Match fur ¨ x in y. • x (mit m = |x|) heißt Subsequenz von y wenn Positionen i1 < i2 · · · < im existieren mit x = y[i1]y[i2] . . . y[im].

¨ man durch einfache Modifika• Algorithmen fur ¨ die Variante (b) erhalt tionen der Algorithmen fur ¨ (a). • Im folgenden sei m = |pat| und n = |text|. Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

164

String Matching: naiver Algorithmus

Der naive Algorithmus Der naive Ansatz besteht darin, fur ¨ jede Position von text (bzw. solange pat ab der aktuellen Position in text paßt) von neuem zu testen, ob pat an dieser Position auftritt. Das allgemeine Schema fur ¨ solch einen naiven Algorithmus lautet: for i := 1 to n − m + 1 do man prufe, ¨ ob pat = text[i . . . i + m − 1] gilt • Die Prufung ¨ kann nun “von links nach rechts” oder “von rechts nach links” erfolgen. • Dies fuhrt ¨ zu unterschiedlichen naiven Algorithmen und darauf auf¨ bauend zu unterschiedlichen Ansatzen der Verbesserung.

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

163

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

165

4. Textalgorithmen

String Matching: naiver Algorithmus

¨ • Zunachst wird die Variante “von links nach rechts” betrachtet.

4. Textalgorithmen

String Matching: naiver Algorithmus

• Trotz der im Durchschnitt linearen Laufzeit lohnt sich der Einsatz von “besseren” String-Matching-Algorithmen, denn:

Algorithmus 4.1. [Naives String-Matching von links nach rechts]

– die nachfolgenden String-Matching-Algorithmen haben sich nicht nur in der Theorie, sondern auch in der Praxis als erheblich effizienter erwiesen, und ¨ gehorcht nicht immer den Gesetzen der Wahrschein– die Realitat lichkeitstheorie.

i := 1 while i ≤ n − m + 1 do j := 1 while j ≤ m and pat[j] = text[i + j − 1] do j := j + 1 end if j = m + 1 then return true i := i + 1 end return false ¨ Problem 4.1 in Zeit O(nm) Satz 4.1. Der naive Algorithmus 4.1 lost und Platz O(m).

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

166

String Matching: naiver Algorithmus

Analyse f ¨ur naives String-Matching

4. Textalgorithmen

168

String Matching: Morris und Pratt

String-Matching nach Morris und Pratt

Algorithmus 4.1 ist naiv im folgenden Sinn: nach jedem Mismatch an Stelle j von pat wird vergessen, daß pat bis zur Position j − 1 auf text paßt.

¨ • Fur ¨ pat = am−1b und text = an benotigt Algorithmus 4.1 (n − m + 1)m = nm − m2 + m

Kommt es an Stelle j von pat zu einem Mismatch, so gilt: pat[1 . . . j − 1] = text[i . . . i + j − 2]

Zeichenvergleiche (Worst Case). ¨ ¨ • Bei einem binaren Alphabet und zufallig erzeugten pat und text (je¨ des Zeichen unabhangig und jedes Symbol mit Wahrscheinlichkeit 1/2) ergibt sich fur ¨ die durchschnittliche Anzahl an Zeichenvergleichen: (2 − 2−m)n + O(1) Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

167

Dies kann wie folgt ausgenutzt werden: Angenommen, pat tritt in text an einer Position i + s mit i < i + s < i + j − 1 auf. Dann muß gelten: pat[1 . . . j − s − 1] = pat[1 + s . . . j − 1]

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

169

4. Textalgorithmen

String Matching: Morris und Pratt

a b c a - - - - -

pat:

String Matching: Morris und Pratt

• Man ermittle in einer Preprocessingphase zu jedem 1 ≤ j ≤ m das ¨ großte k, so daß pat[1 . . . k − 1] echter Suffix von pat[1 . . . j − 1] ist. Der entsprechende Betrag wird mit border[j] bezeichnet.

Veranschaulichung: pat:

4. Textalgorithmen

a b c a b c d - - - - -

border[j] :=

max {k | pat[1 . . . k − 1] = pat[j − k + 1 . . . j − 1]}

1≤k≤j−1

text: - - - - - a b c a b c a - - - - ↑ ↑ ↑ i i+s i+j−1

bzw.

s ist hier der Betrag, um den pat nach rechts verschoben wird.

border[j] :=

Nach einem Mismatch an Position j von pat kann nur dann an i + s ein Match vorliegen, wenn pat[1 . . . j − s − 1] ein Suffix von pat[1 . . . j − 1] ist.

Weiterhin gelte border[1] = 0 • Im Algorithmus schiebe man bei einem Mismatch an Position j des Pattern dieses um s = j − border[j] Stellen nach rechts.

Mit k := j − s folgt: pat[1 . . . k − 1] ist Suffix von pat[1 . . . j − 1]. Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

170

4. Textalgorithmen

max {k | pat[1 . . . k−1] ist echter Suffix von pat[1 . . . j−1]}

1≤k≤j−1

String Matching: Morris und Pratt

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

172

String Matching: Morris und Pratt

¨ ist s ein “safe shift”. • Durch die Maximalitat

Veranschaulichung: naechstmoeglicher Match

Algorithmus 4.2. [Morris und Pratt]

s

Mismatch

Pattern 1

j

Text

¨ Damit man keinen Match verpaßt, muß s moglichst klein und somit k ¨ ¨ werden. moglichst groß gewahlt

i := 1; j := 1 while i ≤ n − m + 1 do while j ≤ m and pat[j] = text[i + j − 1] do j := j + 1 end if j = m + 1 then return true i := i + j − border[j] j := max(border[j], 1) end return false

(A) (B)

Konsequenzen fur ¨ einen verbesserten Algorithmus:

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

171

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

173

4. Textalgorithmen

String Matching: Morris und Pratt

4. Textalgorithmen

String Matching: Morris und Pratt

¨ AlgoLemma 4.2. Wenn border[j] (fur ¨ 1 ≤ j ≤ m) bereits vorliegt, lost rithmus 4.2 Problem 4.1 in Zeit O(n).

Fibonacci-Strings

Beweis. ¨ ¨ • Es gibt hochstens n − m + 1 nicht erfolgreiche Vergleiche (namlich ¨ hochstens einer fur ¨ jedes i).

Definition 4.1. Der n-te Fibonacci-String Fn (n ≥ 0) ist wie folgt definiert: • F0 = 

• Man betrachte nun den Term i + j. Es gilt 2 ≤ i + j ≤ n + 1. • Immer wenn der Vergleich pat[j] = text[i + j − 1] erfolgreich war, wird ¨ i + j um eins erhoht. • Insgesamt wird i + j in (A) und (B) nicht verringert.

• F1 = b • F2 = a ¨ n>2 • Fn = Fn−1Fn−2 fur

⇒ Es gibt ≤ n erfolgreiche Vergleiche Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

174

String Matching: Morris und Pratt

⇒ und somit O(n) Vergleiche insgesamt.

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

String Matching: Morris und Pratt

Beispiel 4.1. border[j] lautet fur ¨ F7:

2 ¨ Es bleibt das Problem, border[j] berechnen zu mussen. ¨ Zunachst ein Beispiel fur ¨ border[j].

j pat[j] border[j]

175

1 a 0

2 b 1

3 a 1

4 a 2

5 b 2

6 a 3

7 b 4

8 a 3

9 a 4

10 b 5

11 a 6

12 a 7

13 b 5

6 a 1

7 a 2

8 b 2

9 a 3

10 c 4

11 c 1

12 b 1

13 a 1

Fur ¨ ababcaabaccba ergibt sich: j pat[j] border[j]

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

176

1 a 0

2 b 1

3 a 1

4 b 2

5 c 3

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

177

4. Textalgorithmen

String Matching: Morris und Pratt

4. Textalgorithmen

String Matching: Morris und Pratt

¨ Lemma 4.3. Algorithmus 4.3 benotigt zur Berechnung der Tabelle ¨ border hochstens O(m) Vergleiche.

Berechnung von border[j]

Beweis. Analog zu Lemma 4.2. 2 • Zur Berechnung der Tabelle border wird eine spezielle Version von Algorithmus 4.2 benutzt. • Man nutzt dabei die aus dem Beweis von Lemma 4.2 bekannte Tatsache aus, daß der Betrag i + j nie verringert wird.

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

178

String Matching: Morris und Pratt

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

Algorithmus 4.3.

180

String Matching: Knuth, Morris und Pratt

Knuth, Morris und Pratt

border[1] := 0 for j := 2 to m do border[j] := 1 end i := 2 j := 1 while i ≤ m do while i + j − 1 ≤ m and pat[j] = pat[i + j − 1] do j := j + 1 border[i + j − 1] := j end i := i + j − border[j] j := max(border[j], 1) end

Der Algorithmus von Morris und Pratt kann noch effizienter gemacht werden. Man betrachte folgendes Beispiel: pat:

a b a a b a - -

text: - - - - - a b a a b c - Es kommt fur ¨ j = 6 zu einem Mismatch. Wegen border[6] = 3 wird pat um drei Zeichen nach rechts geschoben. pat:

a b a a b a - -

text: - - - - - a b a a b c - Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

179

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

181

4. Textalgorithmen

String Matching: Knuth, Morris und Pratt

Es kommt also an der gleichen Stelle des Textes direkt wieder zu einem Mismatch. Dies war abzusehen, denn fur ¨ pat gilt: pat[6] = pat[border[6]] Veranschaulichung: zwangslaeufiger Mismatch

4. Textalgorithmen

String Matching: Knuth, Morris und Pratt

Beispiel 4.2. sborder[j] lautet fur ¨ F7 (vgl. Beispiel 1.1): j pat[j] sborder[j] border[j]

1 a 0 0

2 b 1 1

3 a 0 1

4 a 2 2

5 b 1 2

6 a 0 3

7 b 4 4

8 a 0 3

9 a 2 4

10 b 1 5

11 a 0 6

12 a 7 7

13 b 1 5

s

Mismatch

Algorithmus 4.4. [Knuth, Morris und Pratt] Der Algorithmus von Knuth, Morris und Pratt ist identisch zu Algorithmus 1.2 bis auf die Tatsache, daß statt border die strengere Variante sborder verwendet wird.

!= notwendig

Pattern 1

¨ Zur Berechnung von sborder sind ebenfalls nur marginale Anderungen gegenuber ¨ Algorithmus 1.3 notwendig.

j

Text

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

182

String Matching: Knuth, Morris und Pratt

Offensichtlich kann die bisher genutzte Bedingung, daß pat[1 . . . k − 1] Suffix von pat[1 . . . j − 1] ist, um die Bedingung pat[k] 6= pat[j] ¨ werden. verscharft Konsequenzen fur ¨ eine Verbesserung: man benutze statt border[j] die folgende Variante sborder[j]: sborder[j] :=

max {k | pat[1 . . . k−1] = pat[j−k+1 . . . j−1] und pat[k] 6= pat[j]}

1≤k≤j−1

Falls kein solches k existiert, gelte sborder[j] = 0

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

183

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

184

String Matching: Knuth, Morris und Pratt

Algorithmus 4.5. [Berechnung von sborder] for j := 1 to m do sborder[j] := 0 end i := 2 j := 1 while i ≤ m do while i + j − 1 ≤ m and pat[j] = pat[i + j − 1] do j := j + 1 sborder[i + j − 1] := sborder[j] end sborder[i + j − 1] := max(j, sborder[i + j − 1]) i := i + j − sborder[j] j := max(sborder[j], 1) end

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

185

4. Textalgorithmen

String Matching: Knuth, Morris und Pratt

¨ Satz 4.4. Die Algorithmen 1.3 und 1.4 losen Problem 4.1 in Zeit O(n + m) und Platz O(m).

4. Textalgorithmen

String Matching: Knuth, Morris und Pratt

¨ man i := 1 + 12 − sborder[12] = 6 und j := sborder[12] = 7. Nun erhalt j ↓ a b a a b a b a a b a a b

Beweis. sborder kann wie border in Zeit O(m) berechnet werden. Durch die Verwendung von sborder statt border finden in Algorithmus 1.4 nicht mehr Vergleiche statt als in Algorithmus 1.2. 2

a b a a b a b a a b a c a b a a b a b a a b a a b ↑ i Es tritt wieder ein Mismatch auf, deshalb j := 4 und i := 9.

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

186

String Matching: Knuth, Morris und Pratt

Beispiel 4.3. [Algorithmus von Knuth, Morris und Pratt] Der String F7 wird in dem String abaababaabacabaababaabaab gesucht. Nach dem Start des Algorithmus ergibt sich ein Mismatch fur ¨ j = 12 und i = 1. j ↓ a b a a b a b a a b a a b

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

188

String Matching: Knuth, Morris und Pratt

Die Mismatches setzen sich fort bis j = 1 und i = 13. j ↓ a b a a b a b a a b a a b a b a a b a b a a b a c a b a a b a b a a b a a b ↑ i Ab hier wird nun ein Match ermittelt.

a b a a b a b a a b a c a b a a b a b a a b a a b ↑ i

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

187

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

189

4. Textalgorithmen

String Matching: Boyer und Moore

4. Textalgorithmen

String Matching: Boyer und Moore

Veranschaulichung:

Der Algorithmus von Boyer und Moore

naechstmoeglicher Match Mismatch

Der Algorithmus von Boyer und Moore kann als eine verbesserte Variante eines naiven String-Matching-Algorithmus angesehen werden, bei dem pat mit text von rechts nach links verglichen wird.

Vergleich

Pattern

Algorithmus 4.6. [naives String-Matching von rechts nach links]

j

1

i := 1 while i ≤ n − m + 1 do j := m while j ≥ 1 and pat[j] = text[i + j − 1] do j := j − 1 end if j = 0 then return true i := i + 1 end return false Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

Text

190

String Matching: Boyer und Moore

m

????

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

192

String Matching: Boyer und Moore

¨ Der Algorithmus von Boyer und Moore basiert auf der folgenden Uberlegung:

Kommt es in Algorithmus 1.6 an der Stelle j von pat zu einem Mismatch, so gilt

• Tritt in Algorithmus 1.6 an Stelle j ein Mismatch auf und kommt pat[j + 1 . . . m] nicht ein weiteres mal in pat als Substring vor, so kann pat gleich um m Zeichen nach rechts verschoben werden.

• pat[j + 1 . . . m] = text[i + j . . . i + m − 1] und

• Vergleicht man dagegen von links nach rechts, kann pat nach einem Mismatch an Position j nie um mehr als j Positionen nach rechts verschoben werden (vgl. Algorithmus 1.2).

Dies kann wie folgt ausgenutzt werden: Angenommen, pat tritt in text an einer Position i < i + s < i + m auf. Dann mussen ¨ die beiden folgenden Bedingungen gelten:

• pat[j] 6= text[i + j − 1].

(BM1) fur ¨ alle j < k ≤ m : k ≤ s oder pat[k − s] = pat[k] (BM2) s < j =⇒ pat[j − s] 6= pat[j]

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

191

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

193

4. Textalgorithmen

String Matching: Boyer und Moore

String Matching: Boyer und Moore

Die entsprechenden Werte werden in einer Preprocessingphase ermittelt und in der Shift-Tabelle D abgelegt.

Veranschaulichung: j−s ↓ - - - - a b c b c

pat:

4. Textalgorithmen

¨ j und s } D[j] := min{s| (BM1) und (BM2) gilt fur s>0

pat:

- - - - a b c b c ↑ j text: - - - - - - a b c a b c - - - - ↑ ↑ i i+j−1

Der Algorithmus von Boyer und Moore verwendet nun im Falle eines Mismatches an Position j den in D[j] abgelegten Wert, um pat nach rechts zu verschieben.

¨ Damit man keinen Match verpaßt, muß s wiederum moglichst klein ¨ werden. gewahlt

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

194

4. Textalgorithmen

String Matching: Boyer und Moore

Veranschaulichung:

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

196

4. Textalgorithmen

String Matching: Boyer und Moore

Algorithmus 4.7. [Algorithmus von Boyer und Moore] naechstmoeglicher Match

fuer BM2 !=

Vergleich

i := 1 while i ≤ n − m + 1 do j := m while j ≥ 1 and pat[j] = text[i + j − 1] do j := j − 1 end if j = 0 then return true i := i + D[j] end return false

= fuer BM1

Mismatch

Pattern j

1

Text

m

j pat[j] D[j]

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

D[j] lautet fur ¨ F7:

Beispiel 4.4.

????

195

1 a 8

2 b 8

3 a 8

4 a 8

5 b 8

6 a 8

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

7 b 8

8 a 3

9 a 11

10 b 11

11 a 6

12 a 13

13 b 1

197

4. Textalgorithmen

String Matching: Boyer und Moore

Algorithmus 1.7 kann noch weiter verbessert werden: Tritt an Stelle m von pat (also bereits beim ersten Vergleich) ein Mismatch auf, so wird pat nur um eine Stelle nach rechts verschoben.

4. Textalgorithmen

String Matching: Boyer und Moore

¨ ¨ sich die vereinfachte Version i.d.R. • Auf gewohnlichen Texten verhalt nur marginal schlechter als die ursprungliche ¨ Version. • Bei kleinem |Σ| ist die Occurence-Heuristik i.d.R. nutzlos.

Es sei

naechstmoeglicher Match fuer Occurence

last[c] := max {j | pat[j] = c} 1≤j≤m

und last[c] := 0 falls c nicht in pat auftritt. Mismatch

last[c] gibt fur ¨ ein c ∈ Σ die jeweils letzte Position von c in pat an. Kommt es nun an Stelle j zu einem Mismatch, kann statt

Vergleich

i := i + D[j]

Pattern j

1

m

die Anweisung Text

????

i := i + max(D[j], j − last[text[i + j − 1]]) Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

198

String Matching: Boyer und Moore

¨ verwendet werden. Damit ergeben sich noch großere Verschiebungen. Bemerkungen: ¨ • Verschiebungen der Lange j −last[text[i+j −1]] heißen OccurrenceShift. • Wird nur der Occurence-Shift verwendet, d.h. die Verschiebeanweisung lautet

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

(BM1) pat[j + 1 . . . m] = pat[j + 1 − s . . . m − s] (BM2) pat[j − s] 6= pat[j] Veranschaulichung: pat: *

• Die Worst-Case-Laufzeit des vereinfachten Boyer-Moore-Algorithmus ¨ O(nm). betragt Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

String Matching: Boyer und Moore

Es bleibt das Problem, die Shift-Tabelle D zu berechnen. Dies geschieht in zwei Phasen. In der ersten Phase werden nur Verschiebungen der Form D[j] < j betrachtet. Fur ¨ solche Verschiebungen muß gelten:

i := i + max(1, j − last[text[i + j − 1]]) so spricht man von einem vereinfachten Boyer-Moore-Algorithmus.

199

200

pat: *

*

*

*

*

*

*

b

a

b

a

a

b

b a ↑ j−s

b

a ↑ j

a

b

a

a

b ←

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

a

a

s

b



201

4. Textalgorithmen

String Matching: Boyer und Moore

¨ Die Situation ist ahnlich wie beim Verfahren von Morris und Pratt. Statt ¨ eines Prafixes muß hier aber ein Suffix von pat mit einem inneren Teil von pat ubereinstimmen. ¨ Vorgehensweise fur ¨ die erste Phase: man berechnet (fur ¨ 0 ≤ j ≤ m) rborder[j] mit rborder[j] :=

max {k | pat[j + 1 . . . j + k − 1] = pat[m − k + 2 . . . m]}

1≤k≤m−j

bzw. rborder[j] :=

max {k | pat[j+1 . . . j+k−1] ist echter Suffix von pat[j+1 . . . m]}

1≤k≤m−j

Weiterhin gelte rborder[m] = 0.

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

202

4. Textalgorithmen

String Matching: Boyer und Moore

Beispiel 4.5. rborder[j] lautet fur ¨ F7: j pat[j] rborder[j]

0 6

1 a 5

2 b 4

3 a 3

4 a 2

5 b 6

6 a 5

7 b 4

8 a 3

9 a 2

10 b 1

11 a 1

12 a 1

13 b 0

Man beachte: • rborder[j] entspricht border[j] fur ¨ patR.

4. Textalgorithmen

String Matching: Boyer und Moore

i := m − 1 j := 1 while i >= 0 do while i − j + 1 >= 1 and pat[m − j + 1] = pat[i − j + 1] do j := j + 1 rborder[i − j + 1] = j end i := i − j + rborder[m − j + 1] j := max(rborder[m − j + 1], 1) end

Wegen (BM2) treten relevante Situationen zur Berechnung von D[j] nur im Falle eines Mismatch in der inneren While-Schleife auf. Dementsprechend wird zur Berechnung von D[j] der Algorithmus hinter der inneren While-Schleife um die folgenden Anweisungen erweitert: Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

204

4. Textalgorithmen

String Matching: Boyer und Moore

if j > 1 then s := m − i t := i − j + 1 if t + s > s then D[t + s] = min(s, D[t + s]) endif endif Veranschaulichung:

¨ sich rborder[j] analog zu Algorithmus 1.3 be• Dementsprechend laßt rechnen, wobei man nun aber von rechts nach links vorgeht.

pat: * pat: *

*

*

*

*

*

*

b a b ↑ t=i−j+1

b

a

b

a

a

b

a

a a ↑ t+s

b ↑

a

a

b ←

a

b

s



i

Damit steht der Algorithmus fur ¨ die erste Phase. Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

203

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

205

4. Textalgorithmen

String Matching: Boyer und Moore

4. Textalgorithmen

String Matching: Boyer und Moore

Beispiel 4.6. D[j] nach der ersten Phase fur ¨ den String F7: j pat[j] D[j]

1 a 13

2 b 13

3 a 13

4 a 13

5 b 13

6 a 13

7 b 13

8 a 3

9 a 13

10 b 13

11 a 6

naechstmoeglicher Match

12 a 13

13 b 1

Vergleich

= fuer BM1

Mismatch

Pattern 1

Text

t

j

m

????

¨ Es werden nun in absteigender Reihenfolge mogliche Werte fur ¨ t betrachtet, und D[j] wird entsprechend korrigiert. ¨ ¨ ¨ Der großte mogliche Wert fur ¨ t ergibt sich durch rborder[0] (Lange des ¨ ¨ langsten Substrings, der sowohl echter Prafix als auch echter Suffix ist). Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

206

String Matching: Boyer und Moore

In der zweiten Phase werden Verschiebungen mit D[j] ≥ j betrachtet. Fur ¨ solche Verschiebungen muß die Bedingung (BM1) pat[1 . . . t − 1] = pat[m − t + 2 . . . m] mit j ≤ m − t + 1 gelten. (BM2) ist in dieser Phase stets wahr und braucht nicht weiter betrachtet zu werden. Veranschaulichung: pat: a b a a b a b a a b a a b

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

208

String Matching: Boyer und Moore

¨ Die weiteren moglichen Werte fur ¨ t ergeben sich durch rborder[m−t+1]. t := rborder[0] l := 1 while t > 0 do s=m−t+1 for j := l to s do D[j] := min(D[j], s) end t := rborder[s] l := s + 1 end

pat: a b a a b a b a a b a a b ← s = m − t + 1 → ↑ ↑ ↑ j t−1 m−t+2

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

207

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

209

4. Textalgorithmen

String Matching: Boyer und Moore

Algorithmus 4.8. [Berechnung der Shift-Tabelle fur ¨ Boyer und Moore]

/* Initialisierung */ rborder[m] := 0; D[m] := 1 for j := m − 1 downto 0 do rborder[j] = 1; D[j] = m end /* Phase 1 */ i := m − 1 j := 1 while i >= 0 do while i − j + 1 >= 1 and pat[m − j + 1] = pat[i − j + 1] do j := j + 1 rborder[i − j + 1] = j end Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

String Matching: Boyer und Moore

D[j] := min(D[j], s) end t := rborder[s] l := s + 1 end Beispiel 4.7. [Algorithmus von Boyer und Moore] Der String F7 wird in dem String abaababaabacabaababaabaab gesucht.

a a b a b a a b a b a a b a a b a b a a

a b a a b

b a a b a

a a b a a

a a b a a b

b b a b b

a a b a

a b a a

b a a b

a a b a

b b a a

a a b a a b a a b a b b

a b a a b a b a a b a c a b a a b a b a a b a a b 210

String Matching: Boyer und Moore

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

212

String Matching: Boyer und Moore

Beispiel 4.8. [Shift-Tabellen fur ¨ Boyer/Moore]

if j > 1 then s := m − i t := i − j + 1 if t + s > s then D[t + s] = min(s, D[t + s]) endif endif i := i − j + rborder[m − j + 1] j := max(rborder[m − j + 1], 1) end /* Phase 2 */ t := rborder[0] l := 1 while t > 0 do s=m−t+1 for j := l to s do Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

datenbank 999999991 kuckuck 3336661

retrieval 999999991 rokoko 662641

papa 2241

compiler 88888881 abrakadabra 77777771131 00

¨ Problem 4.1(a) in Zeit O(n + m) und Satz 4.5. Algorithmus 1.7 lost Platz O(m).

211

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

213

4. Textalgorithmen

String Matching: Boyer und Moore

4. Textalgorithmen

Approximatives String-Matching

Bemerkungen:

Anwendungsbeispiele:

• Als scharfe obere Schranke fur ¨ die Anzahl an Zeichenvergleichen ergibt sich 3n.

• Molekularbiologie (Erkennung von DNA-Sequenzen) • Ausgleich verschiedener Schreibweisen (Grafik vs. Graphik)

¨ • Wurde ¨ man statt (BM1) und (BM2) nur (BM1) verwenden, so ware ¨ keine lineare Laufzeit mehr gewahrleistet (O(mn)). • Sucht man mit dem Algorithmus von Boyer und Moore nach allen Matches fur ¨ pat in text, so ist die Laufzeit ebenfalls O(mn).

• Ausgleich von Beugungen • Toleranz gegenuber ¨ Tippfehlern • Toleranz gegenuber ¨ OCR-Fehlern

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

214

Approximatives String-Matching

Approximatives String-Matching

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

216

Approximatives String-Matching

String-Metriken Der Begriff “nahezu” wird dabei durch eine Metrik auf Strings formalisiert.

• Bisher haben wir String-Matching-Probleme betrachtet, bei denen das Muster pat exakt mit einem Substring von text ubereinstimmen ¨ mußte.

Zur Erinnerung: Sei M eine Menge. Eine Funktion d : M × M −→ IR heißt Metrik, wenn die folgenden Bedingungen erfullt ¨ sind: • d(x, y) ≥ 0 fur ¨ alle x, y ∈ M

¨ ¨ man zwar Varianten • Beim Matching von regularen Ausdrucken ¨ laßt zu, aber ebenfalls keine Fehler. ¨ • In vielen praktischen Fallen ist es wunschenswert, ¨ die Stellen von text zu finden, die mit pat “nahezu” ubereinstimme, ¨ d.h. man erlaubt Abweichungen zwischen pat und text.

• d(x, y) = 0 ⇔ x = y fur ¨ alle x, y ∈ M • d(x, y) = d(y, x) fur ¨ alle x, y ∈ M • d(x, z) ≤ d(x, y) + d(y, z) fur ¨ alle x, y, z ∈ M . (M, d) ist dann ein metrischer Raum.

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

215

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

217

4. Textalgorithmen

Approximatives String-Matching

4. Textalgorithmen

Editierdistanz, Levenstein-Metrik

Problem 4.2. Gegeben seien ein String pat, ein String text, eine Metrik d fur ¨ Strings und ein ganze Zahl k ≥ 0. Man finde alle Substrings y von text mit d(pat, y) ≤ k.

Approximatives String-Matching

Definition 4.3.

Bemerkungen: • Fur ¨ zwei Strings x und y ist die Editierdistanz (Edit Distance) ¨ edit(x, y) definiert als die kleinste Anzahl an Einfuge¨ und Loschoperationen, die notwendig sind, um x in y zu uberf ¨ uhren. ¨

¨ man das exakte String-Matching Problem • Fur ¨ k = 0 erhalt ¨ • Problem 4.2 ist zunachst ein “abstraktes” Problem, da nichts uber ¨ die Metrik d ausgesagt wird. • Zur Konkretisierung von Problem 4.2 und zur Entwicklung von ent¨ sprechenden Algorithmen mussen ¨ zunachst sinnvolle Metriken betrachtet werden.

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

218

Approximatives String-Matching

¨ man zusatzlich ¨ • Laßt auch die Ersetzung eines Symbols zu, so spricht man von einer Levenstein-Metrik (Levenshtein Distance) lev(x, y). • Nimmt man als weitere Operation die Transposition (Vertauschung ¨ man die Damerauzweier benachbarter Symbole) hinzu, so erhalt Levenstein-Metrik dlev(x, y). Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

220

Approximatives String-Matching

Bemerkungen:

Hamming-Distanz Definition 4.2. Fur ¨ zwei Strings x und y mit |x| = |y| = m ergibt sich die Hamming-Distanz (Hamming Distance) durch: d(x, y) = |{1 ≤ i ≤ m|x[i] 6= y[i]}|

• Offensichtlich gilt stets dlev(x, y) ≤ lev(x, y) ≤ edit(x, y). • Die Damerau-Levenstein-Metrik wurde speziell zur Tippfehlerkorrektur entworfen.

Bemerkungen: • Die Hamming-Distanz ist die Anzahl der Positionen, an denen sich x ¨ und y unterscheiden. Sie ist nur fur ¨ Strings gleicher Lange definiert.

• Wird in Problem 4.2 fur ¨ d eine der Metriken aus Definition 3.2 verwendet, dann spricht man auch von “string matching with k differences” bzw. von “string matching with k errors”.

• Wird in Problem 4.2 fur ¨ d die Hamming-Distanz verwendet, so spricht man auch von “string matching with k mismatches”. Beispiel 4.9. Die Hamming-Distanz der Strings abcabb und cbacba be¨ 4. tragt Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

219

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

221

4. Textalgorithmen

Approximatives String-Matching

Beispiel 4.10. Fur ¨ x = abcabba und y = cbabac gilt:

4. Textalgorithmen

Berechnung der Stringdistanz

¨ • Da die Metriken edit, lev und dlev sehr ahnlich sind, wird im folgenden nur die Levenstein-Metrik betrachtet.

edit(x, y) = 5

¨ man durch einfache Mo• Algorithmen fur ¨ die anderen Metriken erhalt difikationen der folgenden Verfahren.

abcabba −→ bcabba −→ cabba −→ cbba −→ cbaba −→ cbabac dlev(x, y) = lev(x, y) = 4

• Im folgenden sei m = |x| und n = |y| und es gelte m ≤ n.

abcabba −→ cbcabba −→ cbabba −→ cbaba −→ cbabac

¨ ☞ Losungsansatz: dynamische Programmierung

abcabba −→ bcabba −→ cbabba −→ cbabab −→ cbabac

☞ genauer: berechne die Distanz der Teilstrings x[1 . . . i] und y[1 . . . j] auf der Basis bereits berechneter Distanzen.

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

222

Berechnung der Stringdistanz

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

224

Berechnung der Stringdistanz

Die Tabelle LEV sei definiert durch:

Berechnung der Stringdistanz

LEV [i, j] := lev(x[1 . . . i], y[1 . . . j]) mit 0 ≤ i ≤ m, 0 ≤ j ≤ n Problem 4.3. Gegeben seien zwei Strings x und y. Man ermittle ¨ edit(x, y) bzw. lev(x, y) bzw. dlev(x, y) sowie die zugehorigen Opera¨ tionen zur Uberf uhrung ¨ der Strings.

¨ Die Werte fur ¨ LEV [i, j] konnen mit Hilfe der folgenden Rekursionsformeln berechnet werden:

Bemerkungen:

• LEV [0, j] = j fur ¨ 0 ≤ j ≤ n, LEV [i, 0] = i fur ¨ 0≤i≤m

¨ • Wenn x und y Dateien reprasentieren, wobei x[i] bzw. y[j] die i-te Zeile bzw. j-te Zeile darstellt, dann spricht man auch vom File Difference Problem. ¨ des File Difference • Unter U NIX steht das Kommando diff zur Losung Problems zur Verfugung. ¨ Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

223

• LEV [i, j] = min{ LEV [i − 1, j] + 1, LEV [i, j − 1] + 1, LEV [i − 1, j − 1] + δ(x[i], y[j])}  0 falls a = b • δ(a, b) = 1 sonst Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

225

4. Textalgorithmen

Berechnung der Stringdistanz

4. Textalgorithmen

Berechnung der Stringdistanz

Beispiel 4.11. Darstellung von LEV als Matrix fur ¨ x = cbabac und y = abcabbbaa:

Bemerkungen: ¨ • Die Rekursionsformel spiegelt die drei Operation Loschen, Einfugen ¨ und Substitution wider.

c b a b a c

• Die Stringdistanz ergibt sich als LEV [m, n]. ¨ • Mochte man nur die Stringdistanz berechnen, so genugt ¨ es, sich auf Stufe i der Rekursion die Werte von LEV der Stufe i − 1 zu merken. ¨ ¨ • Benotigt man die zugehorigen Operationen, speichert man LEV ¨ als Matrix und ermittelt die zugehorigen Operationen in einer ¨ “Ruckw ¨ artsrechnung”.

0 1 2 3 4 5 6

a 1 1 2 2 3 4 5

b 2 2 1 2 2 3 4

c 3 2 2 2 3 3 3

a 4 3 3 2 3 3 4

b 5 4 3 3 2 3 4

b 6 5 4 4 3 3 4

b 7 6 5 5 4 4 4

a 8 7 6 5 5 4 5

a 9 8 7 6 6 5 5

¨ Die zugehorigen Umwandlungen lauten: cbabac −→ ababac −→ abcabac −→ abcabbac −→ abcabbbac −→ abcabbbaa

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

226

Berechnung der Stringdistanz

Algorithmus 4.9. [Berechnung der Stringdistanz]

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

228

4. Textalgorithmen

Berechnung der Stringdistanz

Veranschaulichung: Die Berechnung der Stringdistanz kann als Pfad in einem Graphen veranschaulicht werden.

for i := 0 to m do LEV [i, 0] := i end for j := 1 to n do LEV [0, j] := j end for i := 1 to m do for j := 1 to n do LEV [i, j] := min{ LEV [i − 1, j] + 1, LEV [i, j − 1] + 1, LEV [i − 1, j − 1] + δ(x[i], y[j])} end end return LEV [m, n]

a c

b

c

a

b

b

b

a

a

=

Löschoperation Einfügeoperation

b a b

=

Substitution

=

a

= =

keine Änderung

c

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

227

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

229

4. Textalgorithmen

Berechnung der Stringdistanz

Der dargestellte Pfad entspricht der folgenden (nicht optimalen) Umwandlung: cbabac −→ acbabac −→ abcbabac −→ abcabac −→ abcabbac −→ abcabbbac −→ abcabbbaa Aus der Rekursionsformel und den Bemerkungen folgt: Satz 4.6. Die Stringdistanz (fur ¨ edit, lev und dlev) kann in Zeit O(mn) und Platz O(m) berechnet werden. Problem 4.3 kann mit Platz O(mn) ¨ werden. gelost

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

230

Berechnung der Stringdistanz

¨ Mit einer kleinen Anderung kann die angegebene Rekursionsformel ¨ auch zur Losung von Problem 4.2 eingesetzt werden. Es sei M LEV definiert durch: M LEV [i, j] := min {lev(pat[1 . . . i], text[l . . . j])} 1≤l≤j

d.h., M LEV [i, j] ist die kleinste Distanz zwischen pat[1 . . . i] und einem Suffix von text[1, j]. Es gilt nun: M LEV [0, j] = 0 fur ¨ 0 ≤ j ≤ n, denn pat[1 . . . 0] =  und  ist stets in text[1 . . . j] ohne Fehler enthalten.

4. Textalgorithmen

Berechnung der Stringdistanz

Ansonsten berechnet sich M LEV [i, j] wie LEV [i, j], d.h.: • M LEV [i, 0] = i fur ¨ 0≤i≤m • M LEV [i, j] = min{ M LEV [i − 1, j] + 1, M LEV [i, j − 1] + 1, M LEV [i − 1, j − 1] + δ(x[i], y[j])} Gilt nun M LEV [m, j] ≤ k, so endet in Position j ein Substring y von ¨ text mit lev(pat, y) ≤ k (wobei m die Patternlange ist).

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

232

4. Textalgorithmen

Berechnung der Stringdistanz

Beispiel 4.12. Die Tabelle M LEV fur ¨ pat = ABCDE und text = ACEABP CQDEABCR. i 0 1 2 3 4 5

j

0

A B C D E

0 1 2 3 4 5

1 A 0 0 1 2 3 4

2 C 0 1 1 1 2 3

3 E 0 1 2 2 2 2

4 A 0 0 1 2 3 3

5 B 0 1 0 1 2 3

6 P 0 1 1 1 2 3

7 C 0 1 2 1 2 3

8 Q 0 1 2 2 2 3

9 D 0 1 2 3 2 3

10 E 0 1 2 3 3 2

11 A 0 0 1 2 3 3

12 B 0 1 0 1 2 3

13 C 0 1 1 0 1 2

¨ Fur ¨ k = 2 ergeben sich die Positionen 3, 10, 13 und 14. Die zugehorigen Substrings von text sind ACE, ABPCQDE, ABC und ABCR. Satz 4.7. Problem 4.2 kann fur ¨ die Metriken edit, lev und dlev in Zeit ¨ werden. O(mn) gelost

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

231

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

233

14 R 0 1 2 1 1 2

4. Textalgorithmen

Trie

4. Textalgorithmen

Trie

Trie

Suffix-B¨ aume

Definition 4.4. Es sei Σ ein endliches Alphabet. Ein Trie (auch ΣBaum genannt) ist ein Wurzelbaum mit den folgenden Eigenschaften: • In diesem Abschnitt sollen Datenstrukturen zur Beschleunigung des exakten String-Matchings (Problem 4.1) untersucht werden. • Konkret liegt folgende Situation vor: – Gegeben ist ein (evtl. sehr langer) String text. ¨ Problem 4.1, d.h. es sind alle – Man hat Anfragen an text gemaß (oder ein) Vorkommen eines beliebigen Strings pat in text aufzufinden. – Gesucht ist eine Datenstruktur D, mit der nach einer Preprocessingphase fur ¨ text solche Anfragen in sublinearer Zeit beantwortet ¨ werden konnen.

(i) Die Kanten des Baumes sind mit Zeichen aus Σ markiert. (ii) Fur ¨ jeden Knoten k des Baums und jedes Zeichen c ∈ Σ gibt es ¨ hochstens eine Kante, die von k ausgeht und mit c markiert ist. Fur ¨ einen Knoten k in einem Trie bezeichnet path(k) den String, der sich aus der Folge der Kantenmarkierungen auf dem Pfad von der Wurzel nach k ergibt. Fur ¨ eine Menge P von Strings bezeichnet T rie(P ) den kleinsten Trie

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

234

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

236

4. Textalgorithmen

Trie

4. Textalgorithmen

Trie

Anforderungen an die Datenstruktur D:

mit der Eigenschaft: ∀pat ∈ P ∃k : pat = path(k)

¨ • Die Große von D sollte linear in |text| sein. ¨ ¨ • D sollte effizient (moglichst in O(|text|)) aufgebaut werden konnen.

a

b

• Problem 4.1 (exaktes String-Matching) sollte mit Hilfe von D in subli¨ werden konnen. ¨ nearer Zeit gelost b

¨ ☞ Grundidee: Man finde eine geeignete Datenstruktur zur Reprasentation von Wortmengen.

Beispiel 4.13. [Trie] Fur ¨ die Menge P = {ab, ba, babb, bb} von Strings ergibt sich der Trie:

a

b

b

b

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

235

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

237

4. Textalgorithmen

Trie

4. Textalgorithmen

Trie

¨ ¨ • Ein erster Losungsansatz besteht darin, samtliche Suffixe eines Textes mit Hilfe eines Tries darzustellen.

Stringsuche mit Hilfe eines Tries

Es sei P eine Menge von Strings. Dann gilt: ¨ • T rie(P ) kann in linearer Zeit bezuglich ¨ der Gesamtlange der in P enthaltenen Strings aufgebaut werden. ¨ ¨ • Die Große von T rie(P ) ist linear in der Gesamtlange der Strings von P.

¨ eines anderen Suffixes von • Allgemein kann ein Suffix von text Prafix text sein. Dies wurde ¨ dazu fuhren, ¨ daß nicht jeder Suffix mit einem Blatt des Tries assoziiert werden kann. ¨ • Deshalb wird die zusatzliche Voraussetzung eingefuhrt, ¨ daß text mit einem Sonderzeichen $ abgeschlossen sein muß, das ansonsten in text nicht vorkommt.

• Es sei w ein beliebiger String. Dann kann mit Hilfe von T rie(P ) in O(|w|) gepruft ¨ werden, ob w ∈ P gilt. • Fur ¨ jeden Trie gilt: Ausgangsgrad ≤ |Σ|. Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

238

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

240

4. Textalgorithmen

Trie

4. Textalgorithmen

Trie

Suffix-Trie

Beispiel 4.14. Suche des Strings ba in dem Trie fur ¨ die Menge P = {ab, ba, babb, bb}. • Man folgt ausgehend von der Wurzel sukzessive den Kanten des Tries, die mit dem Symbol pat[j] markiert sind. ¨ • Ist das Pattern erschopft und der aktuelle Knoten markiert einen String aus P , so ist das Suchpattern in P .

a

b

b

a

Definition 4.5. Es sei s = s[1] . . . s[n − 1]$ ein String. Dann ist der Suffix-Trie ST (s) der Baum

b

b

ST (s) = T rie({s[1 . . . n], s[2 . . . n], . . . , s[n − 1 . . . n], $})

b

¨ ¨ wobei die Blatter p von ST (s) zusatzlich eine Markierung label(p) tragen, fur ¨ die gilt: label(p) = i ⇐⇒ path(p) = s[i . . . n]

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

239

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

241

4. Textalgorithmen

Trie

a

b

c

¨ Positionsbaume

4. Textalgorithmen

Positionsidentifikator

$

7 b

a

c

$

Definition 4.6. Es seien Σ ein Alphabet, s, u Zeichenreihen (Strings) ∈ Σ∗ mit s 6=  und i ∈ IN mit 1 ≤ i ≤ |s|.

6 a

c

Beispiel 4.15. [Suffix-Trie] Der Suffix-Trie fur ¨ den String abcabc$ sieht folgendermaßen aus:

$

b

Dann heißt u Positionsidentifikator fur ¨ die Position i in s (Bezeichnung: u = pids(i)) genau dann, wenn die folgenden Bedingungen gelten:

5 a

$

b

c

4 c

b

(i) ∃y, z mit s = yuz und |y| = i − 1.

$ 3

(ii) ∀y 0, z 0 : s = y 0uz 0 ⇒ y 0 = y und z 0 = z

$

c

2 $

(iii) |u| ist minimal unter den Bedingungen (i) und (ii). 1

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

242

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

Trie

4. Textalgorithmen

• Es besteht eine Eins-zu-eins-Beziehung zwischen den Knoten von ST (s) und den verschiedenen Substrings von s.

244

¨ Positionsbaume

Bemerkungen: • u =  erfullt ¨ Bedingung (i) fur ¨ jedes s ∈ Σ+ und jedes i mit 1 ≤ i ≤ |s|.

• Die Anzahl der Knoten von ST (s) ist u.U. quadratisch in |s|. • Fur ¨ |s| ≥ 2 erfullt ¨ u =  Bedingung (ii) nicht.

• Dies ist z.B. fur ¨ Strings der Form ambm$ der Fall. Solche Strings der ¨ Lange 2m + 1 haben m2 + 4m + 2 verschiedene Substrings.

• Nicht fur ¨ alle s und alle i existiert ein Positionsidentifikator.

☞ Statt einen kompletten Suffix ab Position i in text nimmt man nur einen String auf, der die Position i in text eindeutig beschreibt.

• Falls fur ¨ String s und Position i ein Positionsidentifikator existiert, so ist er eindeutig bestimmt. Lemma 4.8. Bei Abschluß von s mit einem Sonderzeichen $, das in s nicht vorkommt, existiert fur ¨ jede Position von s$ ein Positionsidentifikator.

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

243

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

245

¨ Positionsbaume

4. Textalgorithmen

¨ Positionsbaume

4. Textalgorithmen

Beispiel 4.16. Der String s = abcabc$ hat die Positionsidentifikatoren: i 1 2 3 4 5 6 7

pids(i) abca bca ca abc$ bc$ c$ $

Positionsbaum

Definition 4.7. Es sei s = s[1] . . . s[n]$ ein String. Dann ist der Positionsbaum P T (s) der Baum P T (s) = T rie({pids(1), pids(2), . . . , pids(n + 1)})

¨ i = Korollar 4.9. s1 . . . sn+1 besitzt je einen Positionsidentifikator fur 1, . . . , n + 1 ⇐⇒ sn+1 6∈ {s1, . . . , sn}

¨ ¨ wobei die Blatter p von P T (s) zusatzlich eine Markierung label(p) tragen, fur ¨ die gilt: label(p) = i ⇐⇒ path(p) = pids(i)

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

246

¨ Positionsbaume

¨ Lemma 4.10. Kein Positionsidentifikator ist Anfang (Prafix) eines Positionsidentifikators fur ¨ eine weitere Position in demselben String s$.

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

248

¨ Positionsbaume

4. Textalgorithmen

Beispiel 4.17. Der Positionsbaum fur ¨ s = abcabc$ sieht wie folgt aus:

Beweis.

a

b

c

$

• Sei i 6= j mit p(i) Anfang von p(j),

7 b

• d.h. p(i)ω = p(j),

a

c

3

⇒ p(i) kommt in s auch an Position j vor.

c

⇒ p(i) identifiziert die Position i nicht eindeutig. a

a

$

2

5

$ 6

$

⇒ Widerspruch. 1

4

2 Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

247

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

249

4. Textalgorithmen

¨ Positionsbaume

4. Textalgorithmen

¨ String-Matching mit Positionsbaumen

¨ String-Matching mit Hilfe von Positionsbaumen

Lemma 4.11. Jeder String s$ hat einen eindeutigen Positionsbaum. Beweis. • Fur ¨ jede Position i gibt es einen eindeutigen Positionsidentifikator p(i).

• Gegeben sei der Positionsbaum fur ¨ text$. • Es sei pat = p1, . . . , pm.

• Man braucht nun nur den Trie zu p(1), . . . , p(n + 1) aufzubauen.

¨ pat, d.h. • Steige im Positionsbaum ab gemaß

¨ des Baumes. • Die Eindeutigkeit folgt aus der Minimalitat

¨ ¨ – wahle zunachst die von der Wurzel ausgehende und mit p1 markierte Kante, – dann die mit p2 markierte Kante, usw.

2 ¨ Korollar 4.12. Ein Positionsbaum fur ¨ s$ mit |s| = n hat n + 1 Blatter.

¨ auf, die den Abstieg beenden. • Es treten nun verschiedene Falle

Beweis. Folgt direkt aus Lemma 4.11. 2 Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

250

¨ Positionsbaume

Lemma 4.13. Es sei s 6= . Dann hat jedes Blatt im Positionsbaum von s$ mindestens einen Bruder.

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

252

¨ String-Matching mit Positionsbaumen

Der Abstieg terminiert, falls:

Beweis.

¨ (1) pat erschopft und zwar

• p(i) = ya, y ∈ Σ∗, a ∈ Σ

(1.1) an einem inneren Knoten oder (1.2) an einem Blatt

• Falls y = , so hat das mit i markierte Blatt einen Bruder, weil es noch mindestens eine weitere Position im Baum gibt.

¨ ¨ (2) pat nicht erschopft, aber der Positionsbaum ist erschopft und zwar (2.1) an einem inneren Knoten oder (2.2) an einem Blatt

• Also sei |y| ≥ 1. ⇒ Dann kommt y noch an anderer Stelle, etwa j 6= i, im String s vor ¨ von p(i)). (wegen der Minimalitat ⇒ Also muß es eine Bruderkante geben, die den Anfang des Weges zu dem mit j markierten Blatt bildet. 2 Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

251

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

253

¨ String-Matching mit Positionsbaumen

4. Textalgorithmen

¨ Aus diesen unterschiedlichen Fallen der Terminierung ergeben sich folgende Resultate: (1) pat kommt genau an den Positionen vor, die vom Abbruchknoten aus erreichbar sind. Insbesondere kommt im Fall (1.2) pat genau an der Position vor, mit der das Blatt markiert ist.

4. Textalgorithmen

¨ String-Matching mit Positionsbaumen

¨ Komplexitat: ¨ O(|pat|), • Der Aufwand fur ¨ die Suche betragt • mit Ausnahme von Fall 1.1, wo ein Unterbaum traversiert werden muß. • Es liegt die Vermutung nahe, daß im Falle 1.1 der Aufwand O(|pat| + ¨ k) betragt, wobei k die Anzahl der Vorkommen von pat ist.

(2.1) pat kommt in text nicht vor. ¨ (2.2) pat kommt hochstens an der Position vor, mit der das erreichte Blatt markiert ist.

• Alternative: man ermittelt fur ¨ jeden Knoten (oder jeden ab einer gewissen Tiefe) die Marken der von diesem Knoten aus erreichbaren ¨ Blatter und legt diese als Liste in dem Knoten ab. ¨ Nachteil: erhohter Speicherplatzverbrauch

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

254

¨ String-Matching mit Positionsbaumen

4. Textalgorithmen

Beispiel 4.18. Es sei text abcabc.

=

• pat = bc: Fall 1.1, pat kommt genau ab den Stellen 2 und 5 vor.

• pat = bcaa: Fall 2.2, pat kann ¨ hochstens an Position 2 vorkommen. Prufung ¨ ergibt: pat kommt nicht vor. a

b

• pat = ca: Fall 1.2, pat kommt nur an der Stelle 3 vor. b

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

256

¨ String-Matching mit Positionsbaumen

• Der Aufwand fur ¨ das Preprocessing (Konstruktion des Positionsbaums) wurde bisher nicht berucksichtigt. ¨ • Selbst ein hoher Preprocessingaufwand wurde ¨ sich aber u.U. lohnen, wenn: – genugend ¨ Anfragen an text gestellt werden oder – wenn der Aufwand zu verschiedenen Zeiten verschieden teuer ist.

$

7

• pat = ac: Fall 2.1, pat kommt in text nicht vor. • pat = cab: Fall 2.2, pat kann ¨ hochstens an Position 3 vorkommen. Prufung ¨ ergibt: pat kommt vor.

c

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

a

c

3 c

a

1

a

$

2

5

$ 6

$ 4

255

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

257

4. Textalgorithmen

¨ Konstruktion von Positionsbaumen

¨ zur Konstruktion von Positionsbaumen ¨ Ansatze

4. Textalgorithmen

¨ Konstruktion von Positionsbaumen

(c) Man spiegelt den Text und die Definition des Begriffs Pos.-Id. und geht wie unter (a) vor. Nachteil: unnaturliche ¨ Umgehensweise

Grundlegender Ansatz: Induktive Konstruktion, d.h. man konstruiert sukzessive P T (s1), . . . , P T (s1, . . . si), P T (s1 . . . sisi+1), . . . , P T (s1 . . . sn$). ¨ Problem: Die Zwischenbaume P T (s1 . . . si) brauchen nicht zu existieren. Beispiel: s = abab$. P T (s1s2s3) existiert nicht, da Position 3 keinen Pos.-Id. in aba hat.

¨ ¨ (d) Man verzichtet darauf, daß die Zwischenbaume Positionsbaume sind. ¨ ☞ Wir untersuchen die Ansatze (a) und (d). • (a) : Rechts-Links-Konstruktion

Wie kann man diese Schwierigkeiten umgehen?

• (b) : Links-Rechts-Konstruktion

(a) Man konstruiert den Baum von rechts nach links (anstatt von links nach rechts), d.h. Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

258

¨ Konstruktion von Positionsbaumen

P Tn+1 = P T ($) P Tn = P T (sn$) P Tn−1 = P T (sn−1sn$) .. P Ti = P T (si . . . sn$) .. P T1 = P T (s1 . . . sn$)

4. Textalgorithmen

260

¨ Konstruktion von Positionsbaumen

¨ Rechts-Links-Konstruktion von Positionsbaumen ¨ Bemerkung: Fur ¨ jeden Teilstring si . . . sn$ existiert der zugehorige Positionsbaum. Ausgehend von dem Positionsbaum fur ¨ si . . . sn$ konstruiert man den Positionsbaum fur ¨ si−1si . . . sn$ wie folgt:

¨ (b) Man hangt jeweils ein $-Zeichen an, d.h.

¨ Von der Wurzel aus durchlauft man einen Pfad mit den Markierungen si−1, si, . . ., bis man:

P T (s1$) P T (s1s2$) .. P T (s1s2 . . . sn$)

(a) ein Blatt k erreicht. – Das Blatt k sei mit j markiert. – Der bisherige Positionsidentifikator fur ¨ j kommt also auch an der Stelle i − 1 vor.

Nachteil: sehr hoher Aufwand Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

259

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

261

¨ Konstruktion von Positionsbaumen

4. Textalgorithmen

¨ – Sowohl p(j) als auch p(i − 1) sind zu verlangern, bis sie sich unterscheiden. – Dementsprechend wird der Pfad von dem erreichten Blatt aus ¨ verlangert. ¨ – Es entstehen zwei neue Blatter mit den Markierungen i − 1 und j.

¨ Konstruktion von Positionsbaumen

4. Textalgorithmen

Veranschaulichung fur ¨ (b): PT(bcabc$)

PT(bbcabc$)

a

b

c

$

a

7

4

(b) einen inneren Knoten k erreicht, von dem aus keine Kante mit der ¨ benotigten Markierung ausgeht. ¨ – Es ist ein neues Blatt k 0 an k anzuhangen. ¨ die Markierung i − 1. – Dieses Blatt erhalt – Die Kantenmarkierung zur Kante (k, k 0) ist das letzte Zeichen von p(i − 1).

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

262

¨ Konstruktion von Positionsbaumen

4. Textalgorithmen

PT(abcabc$)

a

b

c

$

a

b

c

a

c

3 a

$

2

5

$

7

4 b

$ 6

a

c

1

3

a

$

a

$

2

5

2

5

$ 6

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

264

¨ Konstruktion von Positionsbaumen

4. Textalgorithmen

– bis sich eine Unterscheidung der Positionsidentifikatoren ergibt ¨ – und der Pfad sich in zwei Blatter aufspaltet,

$

7

4

3

c

¨ • Ein Positionsbaum wachst also von einem Blatt aus weiter nach unten,

Veranschaulichung fur ¨ (a): PT(bcabc$)

a

c

b

7

$

b

a

c

6

3 c

a

1

a

$

2

5

¨ • oder von einem Zwischenknoten wachst ein neues Blatt heraus.

$ 6

¨ Aufwandsabschatzung: • Der Gesamtaufwand zur Konstruktion eines Positionsbaums fur ¨ ¨ einen String der Lange n ist:

$ 4

O(

n X

|p(i)|)

i=1

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

263

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

265

4. Textalgorithmen

¨ Konstruktion von Positionsbaumen

Bemerkungen:

¨ Konstruktion von Positionsbaumen

4. Textalgorithmen

Beispiel 4.19. Der partielle Positionsbaum fur ¨ abba sieht wie folgt aus:

• Nachteil der Rechts-Links-Konstruktion: Die gesamte Zeichenreihe ¨ muß bekannt sein, bevor sich der Positionsbaum konstruieren laßt. a

¨ • Beim Entwickeln von Text mochte man aber u.U. schon vorher Textstellen identifizieren und Korrekturen vornehmen. ¨ un• Einen Positionsbaum fur ¨ den umgekehrten Text aufzubauen ware naturlich. ¨

b

4. Textalgorithmen

266

¨ Konstruktion von Positionsbaumen

a

1

• Kann ein Positionsbaum auch effizient von links nach rechts konstruiert werden?

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

b

3

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

b

2

268

¨ Konstruktion von Positionsbaumen

4. Textalgorithmen

¨ • Fur ¨ Positionsbaume gilt eine sehr einfache und wichtige Verschachtelungseigenschaft, die beschreibt, wie sich Positionsidentifikatoren ¨ uberlappen ¨ konnen.

¨ Links-Rechts-Konstruktion von Positionsbaumen

• Ziel ist es, ein sogenanntes on-line Verfahren fur ¨ die Konstruktion von ¨ Positionsbaumen zu entwickeln. • Da fur ¨ Teilstrings der Positionsbaum nicht existiert, muß man partielle ¨ Positionsbaume betrachten. ¨ fur • Ein partieller Positionsbaum enthalt ¨ genau diejenigen Positionen des Textes einen Positionsidentifikator, fur ¨ die es einen solchen Positionsidentifikator gibt.

• Die wesentliche Aussage hierzu liefert das folgende MonotonieLemma. Lemma 4.14. [Monotonie-Lemma] Es sei e(i) die Position, bei der der Positionsidentifikator p(i) endet. Dann gilt: i e(j). Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

267

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

269

¨ Konstruktion von Positionsbaumen

4. Textalgorithmen

Veranschaulichung:

Prinzip der Links-Rechts-Konstruktion

s i

¨ Konstruktion von Positionsbaumen

4. Textalgorithmen

j

e(j)

• Man nehme an, wir haben den partiellen Positionsbaum fur ¨ den String s1 . . . si.

e(i)

¨ • p(i) = si . . . se(i) ist der kurzestm ¨ ogliche String, der die Position i eindeutig bestimmt.

• k sei die erste Postion, fur ¨ die kein Positionsidentifikator existiert, d.h. sk sk+1 . . . si ist nicht eindeutig in s1 . . . si.

• Somit kommt si+1 . . . se(i)−1 noch an anderer Stelle vor.

s(1)s(2) . . .

• sj . . . se(j) ist Substring von si+1 . . . se(i)−1.

• Diesem Anfang entspricht ein Knoten im partiellen Positionsbaum. Dieser Knoten sei mit k markiert.

2 270

¨ Konstruktion von Positionsbaumen

4. Textalgorithmen

s(i)

• Der Anfang von p(k) ist sk sk+1 . . . si.

• Somit ist sj . . . se(j) nicht eindeutig in s. Widerspruch.

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

s(k−1) s(k) . . .

• Wir fassen Intervalle von Positionen zusammen, deren Pos.-Id. an derselben Stelle enden. Dies deuten wir so an:

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

4. Textalgorithmen

272

¨ Konstruktion von Positionsbaumen

Konstruktionsschritt: • Bei der Hinzunahme von si+1 wird nun versucht, die Markierung k im partiellen Positionsbaum weiter nach unten zu verschieben.

text Intervalle von Positionen

¨ ¨ auftreten: • Hierbei konnen die folgenden Falle

die hier enden

• Graphisch dargestellt ergibt sich dann die folgende Verschachtelung fur ¨ die Positionsidentifikatoren:

text

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

$ 271

¨ uber ¨ eine ausgehende Kante (1) Der mit k markierte Knoten verfugt fur ¨ si+1. ¨ der mit si+1 markierten Kante. Jetzt Dann bewegt man k langs ¨ ¨ konnen die folgenden Falle auftreten: (1.1) Der jetzt mit k markierte Knoten ist ein innerer Knoten. Dann ist nichts weiter zu tun. (1.2) Der jetzt mit k markierte Knoten ist ein Blatt mit Markierung l. Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

273

¨ Konstruktion von Positionsbaumen

4. Textalgorithmen

¨ Dann ist p(l) um ein Zeichen zu verlangern, d.h. an das bisheri¨ ge Blatt wird ein neuer Knoten angehangt und die Markierung l wandert zu dem neuen Blatt. (2) Der mit k markierte Knoten hat keine ausgehende Kante, die mit si+1 markiert ist. Dann wird ein neues Blatt und eine neue ausgehende und mit si+1 markierte Kante zu diesem Blatt angelegt. Das neue Blatt wird mit k markiert. Es gilt nun zu prufen, ¨ ob Positionsidentifikatoren fur ¨ die Positionen ¨ k + 1, k + 2, . . . existieren. Hierzu sind neue Blatter in den Baum einzutragen. Es sei k + m die erste Position fur ¨ die nun kein Pos.-Id. existiert. Dann ist noch k + m einzutragen.

¨ Konstruktion von Positionsbaumen

4. Textalgorithmen

Fall 1.2:

s(i)

s(i) k

s(i+1)

s(i+1) l

k s( e(l) )

l

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

274

¨ Konstruktion von Positionsbaumen

4. Textalgorithmen

Fall 1.1:

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

276

¨ Konstruktion von Positionsbaumen

4. Textalgorithmen

Fall 2:

s(i)

s(i)

s(i)

k

k s(i+1)

s(i)

s(i+1)

s(i+1)

k k

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

275

Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

277

¨ Konstruktion von Positionsbaumen

4. Textalgorithmen

Bemerkungen: • Man kann den Eingabestring jederzeit mit einem $ abschließen. ¨ Dann wird mit dem angegebenen Verfahren der zugehorige Positionsbaum fertig konstruiert. • Folgende Kosten treten bei der Konstruktion auf: ¨ (1.1) p(k) wird um ein Zeichen verlangert. Aufwand: O(1) ¨ (1.2) p(k) und p(l) werden um je ein Zeichen verlangert. Aufwand: O(1) ¨ (2) p(k) wird um ein Zeichen verlangert. Aufwand: O(1) Das Einfugen ¨ von k + 1, k + 2, . . . k + m − 1 und das Auffinden von ¨ k + m kostet proportional zur Lange von p(k + 1) . . . p(k + m). Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

278

¨ Konstruktion von Positionsbaumen

4. Textalgorithmen

• Der Gesamtaufwand zum Aufbau eines Positoinsbaums fur ¨ einen ¨ String der Lange n ist also: O(

n X

|p(i)|)

i=1

• Damit ist die Links-Rechts-Konstruktion nicht aufwendiger als die Rechts-Links-Konstruktion. ¨ • Sprachliche Texte s haben haufig die Eigenschaft, daß |p(i)| ≈ log |s| gilt. Dann ergibt sich fur ¨ den Gesamtaufwand: O(|s| log |s|) ¨ der Aufwand O(n2). • Im Worst-Case betragt Information Retrieval — FH Bonn-Rhein-Sieg, SS 06

279