Stringmatching

Werbung
Kapitel 2
Stringmatching
2.2
Tries
Gegeben sind ein Alphabet
Beispiel
Σ
und Wörter über diesem Alphabet.
{der, die, das, eine, einer, eines}
Ein Trie ist ein digitaler Suchbaum, der Wörter
aus einer Menge S speichert. Die Wörter sind Elemente von
Suchen nach einem Wort
w:
Folge dem mit
w
Σ∗ .
Das Ende eines Wortes wird mit
markiert.
beschriebenen Weg.
Einfügen: Zunächst dem maximalen Präx im Baum folgen. Falls dies nicht mehr möglich ist, einen
neuen Pfad für den Rest schaen.
Streichen: Nach Wort suchen und das Blatt
entfernen. Eventuell einen Weg der Form
entfernen. Falls ein Wort nicht in einem Blatt endet die Knotenmarkierung
am Ende
bei dem Knoten des
letzten Buchstabens entfernt.
2.2.1
komprimierte Tries (Patricia Tries)
Bei komprimierten Tries werden (im Gegensatz zu normalen Tries) Folgen von Knoten bzw. Kanten
ohne Verzweigung und Markierung mit
zu einem einzigen Knoten und einer Kante zusammengefasst.
Dabei werden an die Kante die einzelnen Kantenbeschriftungen geschrieben (als Teilwort zusammengefasst).
1
Suchen: Das aktuelle Wort nach und nach mit den
Kantenbeschriftungen vergleichen.
Einfügen: Eventuell die Kante spalten und einen
neuen Knoten einfügen.
Streichen: Das Blatt streichen und ggf. einzelne
Kinder verschmelzen.
Laufzeit:
O(|w|)
(w: Wort das eingefügt werden soll)
Jeder innnere Knoten hat
2.2.2
≥2
Kinder.
Suxbaum
Für ein Wort
Beispiel
α ∈ Σ∗ ( Σ
ist das Alphabet): Komprimierter Trie für alle Suzes von
α.
α = T EST ER
Die Zahl gibt die Position an wo der entsprechende
Sux beginnt.
(Wenn an das Wort ein Sonderzeichen
6∈ Σ
ange-
hängt wird z.B. T EST ER$, dann enden alle
Wörter in Blättern.)
Die Suche nach
β ∈ Σ∗
im Suxbaum für
- endet mit einem Blatt:
β
α:
ist ein Sux von
- endet erfolglos (d.h. ohne dass
β
α.
ganz abgearbeitet ist):
β
In diesem Fall wird der längste Präx von
ist kein Teilwort von
β
- endet erfolgreich (im Blatt oder einem inneren einem inneren Knoten):
Im letzten Fall ist
β
ein Präx eines Suzes von
α,
β)
die Menge der Suzes an, von denen
β
β
α
ist.
ist ein Teilwort von
α.
α.
β hängt, gibt (mit voran geschrieben-
d.h. ein Teilwort von
Der Teilbaum, der an dem letzten Knoten von der Abarbeitung von
em
α.
gefunden, der Teilwort von
ein Präx ist.
⇒ Ein Suxbaum ist eine eziente Datenstruktur für String-Matching mit Vorverarbeitung des Textes.
(String-Matching geht in Zeit O(|β|))
Kontruktion von Suxbäumen
Wort
α = a1 . . . an
βi = ai . . . an
naiv: Füge nacheinander
β1 . . . βn+1
mit
i = 1, . . . , n, (n + 1)
(leeres Wort)
in den zunächst leeren Trie ein.
2
Laufzeit:
O(|β1 | + · · · + |βn+1 |)
also
n
P
i = O(n2 )
i=0
Speicherplatz:
Der Suxbaum hat O(n) Knoten aber die Kantenbeschriftungen durch Teilwörter können die Gesamtlänge
Θ(n2 ) haben. Dies ist aber nicht nötig. Die Anfangs- und Endpositionen der Teilwörter innerhalb von
α genügen.
Damit: O(1) Platz pro Knoten und insgesamt O(n) Platz.
eziente Konstruktion
Algorithmen von Weiner (1973), McCreight (1973) und Ukkonen (1995)
Algorithmus von McCreight:
Es werden sogenannte Sux-Links eingefügt.
Bezeichnung
γ:
Der Knoten bei dem das Wort
γ
(von der Wurzel aus) endet (falls existent).
Sux-Link: Zeiger von einem Knoten der Form
αγ
Es werden nacheinander
β1 , . . . , β n
eingefügt (βi
zu
γ (α ∈ Σ, γ Σ∗ )
= ai . . . an )
(zum ezienten Einfügen
βi+1
nach
βi
helfen Sux-Links.)
Sicherheitshalber:
α
endet mit Sonderzeichen
$ 6∈ Σ
damit alle Suzes in Blättern enden.
δi
= Präx von
βi
der beim Einfügen schon im
Baum vorhanden ist. Also:
(η ist der Rest von
γi ,
βi = δi η
der noch eingefügt werden
muss.)
x ist das erste Zeichen von
Also:
η
Invariante aufrecht erhalten: Nach dem Einfügen von
δi = )
[und damit auch für
Sei also
δi = xγ
βi+1 = γη
wird beim Einfügen von
βi+1
einfügen:
Falls
γ=
setze einen Sux-Link auf die Wurzel, sonst
Nach Invariante besitzt
u
einen Sux-Link.
3
βi
konstruiert
existiert ein Sux-Link für
γ1 , . . . , γi−1 ]
γi 6= , δi = αγ
βi+1
β.
u :=
Vater von
γi .
γi
(auÿer wenn
Sei
γ = γ1 γ2
|{z}
Beschriftung der Kante
Der Sux-Link von
Von dort aus wird
u
γ2 η
liefert
γ1 .
einfügt um den
en. Bei jedem Zwischenknoten
w
(u, δ1 )
w
βi+1
zu erhalten Pfad nach unten zu folgen. Dabei
wird das aktuell nächste Zeichen von
zu nden, [O(1) Zeit pro Zwischenkonten] wenn
Einfügung von
βj+1
γ2
dieser Weg bereits benutzt wurde.]
4
γ1
γ2
abarbeit-
benutzt, um das richitge
abgearbeitet ist. [Das ist möglich, da bei der
Herunterladen