suche in texten: suffix-bäume

37
WS03/04 1 Suche in Texten: Suffix-Bäume Prof. Dr. S. Albers Prof. Dr. Th. Ottmann

Upload: kim-sherman

Post on 03-Jan-2016

55 views

Category:

Documents


0 download

DESCRIPTION

Suche in Texten: Suffix-Bäume. Prof. Dr. S. Albers Prof. Dr. Th. Ottmann. Suche in Texten. Verschiedene Szenarios: Dynamische Texte Texteditoren Symbolmanipulatoren Statische Texte Literaturdatenbanken Bibliothekssysteme Gen-Datenbanken WWW-Verzeichnisse. Eigenschaft von Suffix-Bäume. - PowerPoint PPT Presentation

TRANSCRIPT

WS03/04 1

Suche in Texten:Suffix-Bäume

Prof. Dr. S. Albers

Prof. Dr. Th. Ottmann

2 WS03/04

Suche in Texten

Verschiedene Szenarios:

Dynamische Texte

• Texteditoren• Symbolmanipulatoren

Statische Texte

• Literaturdatenbanken• Bibliothekssysteme• Gen-Datenbanken• WWW-Verzeichnisse

3 WS03/04

Eigenschaft von Suffix-Bäume

Suchindex

zu einem Text für Suche nach verschiedenen Mustern

Eigenschaften:

1. Teilwortsuche in Zeit O(| |).

2. Anfragen an selbst, z.B.:

Längstes Teilwort von , das an mind. 2 Stellen auftritt.

3. Präfix-Suche: Alle Stellen in mit Präfix .

4 WS03/04

Eigenschaft von Suffix-Bäume

4. Bereichs-Suche: Alle Stellen in im Intervall [, ] mit lex , z.B.

abrakadabra, acacia [abc, acc],

abacus [abc, acc] .

5. Lineare Komplexität:

Speicherplatzbedarf und Konstruktionszeit O(| |)

5 WS03/04

Tries

Trie: Baum zur Repräsentation von Schlüsseln.

Alphabet , Menge S von Schlüsseln, S *

Schlüssel Zeichenkette aus *

Kante eines Tries T: Beschriftung mit einzelnen Zeichen aus

benachbarte Kanten: verschiedene Zeichen

6 WS03/04

Tries

a

a

a

c

b

b

c

b

b c

c

c

Beispiel:

7 WS03/04

Tries

Blatt repräsentiert Schlüssel:

Entspricht Beschriftung der Kanten des Weges

von der Wurzel zu Blatt

! Schlüssel werden nicht in Knoten gespeichert !

8 WS03/04

Suffix-Tries

Trie für alle Suffixe eines Wortes

Beispiel: = ababc

Suffixe: ababc = suf1

babc = suf2

abc = suf3

bc = suf4

c = suf5

a

a

a

c

b

b

c

b

b c

c

c

9 WS03/04

Suffix-Tries

Innere Knoten eines Suffix-Tries = Teilwort von .

Jedes echte Teilwort von ist als innerer Knoten repräsentiert.

Sei = anbn : n2 + 2n + 1 verschied. Teilwörter = innere Knoten

Speicherplatzbedarf O(n2).

10 WS03/04

Suffix-Tries

Ein Suffix-Trie T erfüllt bereits einige der geforderten Eigenschaften:

a

a

a

c

b

b

c

b

b c

c

c

1. Zeichenkettensuche nach : Folge dem Weg mit Kantenbeschriftung in T in Zeit O(| |). Blätter des Teilbaumes Vorkommen von

2. Längstes, doppelt auftretendes Wort: Innerer Knoten mit größter Tiefe, der mind. zwei Söhne hat.

3. Präfix-Suche: alle Vorkommen von Zeichenketten mit Präfix finden sich in dem Teilbaum unterhalb des inneren Knotens von in T.

11 WS03/04

Suffix-Bäume

Suffix-Baum entsteht durch Kontraktion von unären Knoten aus

Suffix-Trie:

a

a

a

c

b

b

c

b

b c

c

c

ab

abc abc

b

c c

c

Suffix-Baum = kontraktierter Suffix-Trie

12 WS03/04

Interne Repräsentation von Suffix-Bäumen

Sohn/Bruder-Repräsentation

Teilwort: Zahlenpaar (i,j)

ab

abc abc

b

c c

c

T

Beispiel: = ababc

13 WS03/04

Interne Repräsentation von Suffix-Bäumen

()

(1,2) (2,2) (5,$)

(3,$) (5,$) (3,$) (5,$)

ab

abc abc

b c

c c

Beispiel = ababc

Knoten v = (v.w, v.o, v.sn, v.br)

Weitere Zeiger (Suffix-Zeiger) kommen später hinzu

14 WS03/04

Eigenschaften von Suffix-Bäumen

(S1) Kein Suffix ist Präfix eines anderen Suffixes;

gilt, falls (letztes Zeichen von ) = $

Suche:

(T1) Kante nichtleeres Teilwort von .

(T2) Benachbarte Kanten: zugeordnete Teilworte beginnen

mit verschiedenen Zeichen.

15 WS03/04

Eigenschaften von Suffix-Bäumen

Größe

(T3) Innerer Knoten ( Wurzel): mind. zwei Söhne.

(T4) Blatt (nicht-leeres ) Suffix von .

Sei n = | | 1

) ( atzSpeicherpl

Knoten inneren der Anzahl

:Blätter der Anzahl

n

n

nT

T

1

)3(

)4(

16 WS03/04

Konstruktion von Suffix-Bäumen

Definition:

partieller Weg: Weg von der Wurzel zu einem Knoten von T

Weg: Ein partieller Weg, der bei einem Blatt endet.

Ort einer Zeichenkette : Knoten am Ende des mit

beschrifteten partiellen Weges (falls er existiert).

ab

abc abc

b

c c

c

T

17 WS03/04

Konstruktion von Suffix-Bäumen

Erweiterung einer Zeichenkette : Zeichenkette mit Präfix

erweiterter Ort einer Zeichenkette : Ort der kürzesten Erweiterung

von , deren Ort definiert ist.

kontraktierter Ort einer Zeichenkette : Ort des längsten Präfixes von

, dessen Ort definiert ist.

ab

abc abc

b

c c

c

T

18 WS03/04

Konstruktion von Suffix-Bäumen

Definitionen:

sufi: an Position i beginnendes Suffix von , also z.B.

suf1 = , sufn = $.

headi : längstes Präfix von sufi , das auch Präfix von sufj für

ein j < i ist.

Beispiel: = bbabaabc = baa (hat keinen Ort)

suf4 = baabc

head4 = ba

19 WS03/04

Konstruktion von Suffix-Bäumen

a

abc

abc

c

b

aabc

b

baabc

a cbabaabc

c

= bbabaabc

20 WS03/04

Naive Suffix-Baum-Konstruktion

Beginne mit dem leeren Baum T0

Der Baum Ti+1 entsteht aus Ti durch Einfügen des Suffixes sufi+1.

Algorithmus Suffix-Baum

Input: Eine Zeichenkette Output: Der Suffix-Baum T von

1 n := | |; T0 := ;

2 for i := 0 to n – 1do

3 füge sufi+1 in Ti ein, dies sei Ti+1 ;

4 end for

21 WS03/04

Naive Suffix-Baum-Konstruktion

In Ti haben alle Suffixe sufj , j < i bereits einen Ort.

headi = längstes Präfix von sufi, dessen erweiterter Ort in Ti-1 existiert.

Definition:

taili := sufi – headi, d.h. also sufi = headitaili.

taili .

)1(S

22 WS03/04

Naive Suffix-Baum-Konstruktion

Beispiel: = ababc

suf3 = abc head3 = ab tail3 = c

T0 =

T1 =

T2 =

ababc

ababc babc

23 WS03/04

Naive Suffix-Baum-Konstruktion

Ti+1 kann aus Ti wie folgt konstruiert werden:

1. Man bestimmt den erweiterten Ort von headi+1 in Ti und teilt die

letzte zu diesem Ort führende Kante in zwei neue Kanten auf durch Einfügen eines neuen Knotens.

2. Man schaffe ein neues Blatt als Ort für sufi+1

x = erweiterter Ort von headi+1

x

v

headi+1

taili+1

24 WS03/04

Naive Suffix-Baum-Konstruktion

Beispiel: = ababc

babc

c

babcababc

abc

ab

T3

T2

head3 = abtail3 = c

25 WS03/04

Naive Suffix-Baum-Konstruktion

Algorithmus Suffix-Einfügen

Input: Der Baum Ti und der Suffix sufi+1

Output: Der Baum Ti+1

1 v := Wurzel von Ti

2 j := i

3 repeat

4 finde Sohn w von v mit w.u = j+1

5 k := w.u – 1;

6 while k < w.o and k+1 = j+1 do

7 k := k +1; j := j + 1

end while

26 WS03/04

Naive Suffix-Baum-Konstruktion

8 if k = w.o then v := w

9 until k <w.o or w = nil

10 /* v ist konktraktierter Ort von headi+1 */

11 füge den Ort von headi+1 und taili+1 in Ti unter v ein

Laufzeit für Suffix-Einfügen: O( )

Gesamtlaufzeit für naive Suffix-Baum-Konstruktion: O( )

27 WS03/04

Der Algorithmus M

(Mc Creight, 1976)

Falls erweiterter Ort von headi+1 in Ti gefunden: Erzeugen eines neuen

Knotens und Aufspalten einer Kante O(1) Zeit.+

Idee: Erweiterter Ort von headi+1 wird in konstanter amortisierter Zeit in Ti bestimmt. (Zusatzinformation erforderlich!)

28 WS03/04

Analyse des Algorithmus M

Theorem 1

Algorithmus M liefert in Zeit O(| |) einen Suffix-Baum für

mit | | Blättern und höchstens | | - 1 inneren Knoten.

29 WS03/04

Suffix-Baum Anwendung

Verwendung von Suffix-Baum T:

1 Suche nach Zeichenkette : Folge dem Weg mit Kantenbeschriftung in T in Zeit O(| |).Blätter des Teilbaumes Vorkommen von

2 Suche längstes, doppelt auftretendes Wort: Finde Ort eines Wortes mit größter gewichteter Tiefe, der innerer Knoten ist.

3 Suche nach Präfix: Alle Vorkommen von Zeichenkettenmit Präfix finden sich in dem Teilbaum unterhalb des „Ortes“ von in T.

30 WS03/04

Suffix-Baum Anwendung

4 Bereichssuche nach [, ] :

Bereichsgrenzen

31 WS03/04

Suffix-Baum Beispiel

T0 = T1 = bbabaabc

suf1 = bbabaabc suf2 = babaabc head2 = b

32 WS03/04

Suffix-Baum Beispiel

T2 = b

abaabc babaabbc

T3 =

abaabc b

abaabc babaabbc

suf3 = abaabc suf4 = baabchead3 = head4 = ba

33 WS03/04

Suffix-Baum Beispiel

T4 = abaabc b

babaabbca

abcbaabc Ort von head4

suf5 = aabchead5 = a

34 WS03/04

Suffix-Baum Beispiel

babaabbca

abcbaabc

Ort von head5

abc

a bT5 =

suf6 = abc head6 = ab

baabc

35 WS03/04

Suffix-Baum Beispiel

babaabbca

abcbaabc

Ort von head6

abc

a bT6 =

b

c aabc

suf7 = bc head7 = b

36 WS03/04

Suffix-Baum Beispiel

babaabbca

abcbaabc

abc

a bT7 =

b

c aabc

c

suf8 = c

37 WS03/04

Suffix-Baum Beispiel

babaabbca

abcbaabc

abc

a bT8 =

b

c aabc

c

c