Zeichenkettensuche

Werbung
Spezialvorlesung
Suchalgorithmen
Thema:
Zeichenkettensuche und
Wörterbücher
Stefan Edelkamp
Struktur des Buchs
Überblick

Teilstring-Wörterbücher




Suffix-Tries und Suffixbäume
Konstruktionsalgorithmus von McCreight
Generalisierte Suffixbäume
Teilmengen-Wörterbücher



Tries
Hash Tables
Unlimited Branching Tree
Suffixbäume
Ein String W besitzt genau |W| Endstücke,
bestehend aus insgesamt |W| über 2 =
O(|W|^2) Zeichen.
 ergänze alle Worte W um ein spezielles
Endsymbol $, und
 füge Suffixe von dem erweiterten Wort W$ in
einem Trie ein
 Suffixtrie
Charakterisierung
Satz: Jeder Knoten im
Suffixtree für W entspricht
genau einem eindeutigem
Teilstring.
Beweis: Sicherlich entspricht jeder Knoten im Suffixtrie
mindestens einem Teilstring von W, da er durch ein
Anfangsstück eines Suffixes von W erreicht werden
kann. Unterschiedliche Zeichenketten führen in
einem Trie aber auch zu unterschiedlichen Knoten.
Suffixbaum
kompakte Darstellungsform eines Suffixtries, in
dem jeder Knoten mit nur einem Nachfolger
mit seinem Elter verschmolzen ist.
 Die durch die Elimination von Knoten mit
Grad zwei gewonnene Struktur wird PatriciaBaum genannt (Patricia: Akronym aus
practical algorithm to retrieve information
coded in alphanumeric)
Platzkomplexität
Suffixbaum
Jeder Knoten im Suffixbaum für W hat mehr
als einen Nachfolger und W viele Blätter.
 Die Kantenbeschriftungen werden als
Intervall des zugrundeliegenden Strings an
den Knoten verwaltet, auf dem die Kante
einläuft
 O(|W|) Platz

Definitionen
Partieller Weg: Zusammenhängende, bei der Wurzel
beginnende Folge von Kanten.
Weg: partieller Weg, der bei einem Blatt endet.
Ort einer Zeichenkette m: Knoten im Suffixbaum am
Ende des mit m bezeichneten Weges (falls er
existiert).
Erweiterung einer Zeichenkette m: jede Zeichenkette,
die als Präfix hat.
Erweiterter Ort einer Zeichenkette m: Ort der
kürzesten Erweiterung von m, deren Ort definiert ist.
Kontraktierter Ort einer Zeichenkette m: Ort des
längsten Präfixes von m, dessen Ort definiert ist.
Aufteilung von Strings
Suffix sufi ist der an Position i beginnendes
Suffix von W mit suf1 = W.
String headi ist der längste Präfix von sufi, der
auch Präfix von sufj für ein j < i ist und
String taili ist festgelegt als sufi − headi, also
sufi = headitaili.
Beispiel: Sei W = ababc, dann suf3 = abc, head3
= ab, und tail3 = c.
Eigenschaften
Satz: Jeder innere Knoten t im Suffixbaum für W entspricht
dem größten gemeinsamen Präfix zweier Suffixe von W.
Beweis: Der größte gemeinsame Präfix p von sufi und sufj
von W ist Teilstring von sufi und sufj und bildet einen p
beschreibenden Knoten t im Suffixtrie. Die sufi und sufj
darstellenden Blätter befinden sich aufgrund der
Präfixeigenschaft von p in dem Teilbaum, der durch t
beschrieben wird.
Angenommen, t wird durch Kontraktion gelöscht. Dann
hat t nur einen Nachfolger t‘, der eine Erweiterung p‘ von
p repräsentiert. Die Zeichenkette p‘ ist jedoch Präfix von
sufi und sufj,
 Widerspruch zu p größter gemeinsame Präfix.
Suffixbaum Konstruktion
Naives Verfahren
In dem ersten Ansatz beginnen wir mit dem
leeren Baum T0.
Der Baum Ti+1 entsteht aus Ti durch Einfügen
des Suffixes sufi+1.
Konstruktionsidee
Zur Einfügung von sufi wird Ti+1 kann aus Ti wie
folgt konstruiert werden:
 bestimme den erweiterten Ort von headi+1 in
Ti und teile die letzte zu diesem Ort führende
Kante durch Einfügen eines neuen Knotens
in zwei neue Kanten auf.
 schaffe ein neues Blatt als Ort für sufi+1.
Offenbar sichert das eindeutige Endesymbol $,
dass stets taili nicht leer ist.
Beispiel

Es gibt Beispiele, für die der oben
beschriebene Algorithmus O(n^2) viele
Schritte benötigt, um einen Suffixbaum zu
konstruieren.
McCreight‘scher
Algorithmus
…fußt auf dem sogenannten Suffixlink.
Der Suffixlink von dem Ort einer Zeichenkette
am, a Σ, mΣ* zeigt auf den Ort von m und
wird als als Abkürzung bei der
Baumkonstruktion verwendet werden.
In Ti haben alle sufj, j < i bereits einen Ort
 headi ist der längste Präfix von sufi, dessen
erweiterter Ort in Ti−1 existiert.
Linarzeitalgorithmus
Wenn der erweiterte Ort von headi+1 in Ti
gefunden ist, kann das Erzeugen eines
neuen Knotens und das Aufspalten einer
Kante in konstanter Zeit geschehen.
Der McCreight‘sche Algorithmus läuft in
2 Phasen.
1. Bestimme headi+1 in konstanter amortisierter
Zeit in Ti
2. Füge zusätzliche Suffixlinks ein

Lemma
Wenn headi = am für ein Symbol a und eine
(evtl. leere) Zeichenkette m ist, dann ist m ein
Präfix von headi+1.
Beweis: Sei headi = am, dann existiert ein j < i,
so dass a Präfix von sufi und sufj ist nach der
Definition von headi. Also ist m ein Präfix
sowohl von sufi+1 als auch von sufj+1.
Invarianten
Beachte Ort von m kann niemals im Teilbaum mit
Wurzel beim Ort von am liegen, da in diesem
Teilbaum nur Erweiterungen von am liegen.
(I1) Alle inneren Knoten von Ti−1 haben einen korrekten
Suffix-Zeiger in Ti.
(I2) Bei der Konstruktion von Ti wird der kontraktierte
Ort von headi in Ti−1 besucht.
Offensichtlich gelten beide Bedingungen für i = 1.
Ist i > 1, so folgt aus (I2), dass man die Konstruktion
von Ti+1 aus Ti beim kontraktierten Ort von headi in
Ti−1 beginnen kann.
Blick mit der Lupe
Ist headi nicht leer, so bezeichnet αi die Konkatenation
der Kantenbeschriftungen des Weges zum
kontraktierten Ort von headi ohne den ersten
Buchstaben ai.Ferner sei βi = headi − ai αiIst headi nicht leer, haben wir in Ti:
 headi+1 = αiβi γi+1.
Schritt 1 des Algorithmus
Einfügen des Ortes von headi+1
Schritt 2 des Algorithmus
Einfügen des Suffix-Zeigers für den Ort von headi.
In einer Implementierung werden natürlich Schritt 1
und 2 in einander verflochten.
Beispiel
W=bbbbbababbbaabbbbbc
Konstruktion von
T14 as T13
Durch Einfügen von
suf14=bbbbbc
Korrektheit
Satz: Falls der Ort von αiβi in Ti nicht existiert,
dann ist headi+1 = αiβi , d.h. γi+1 ist leer
Beweis (Fortführung)
Laufzeitanalyse
Der Algorithmus von McCreight liefert in Zeit
O(|W|) einen Suffixbaum für W.
Analyse Rescanning
(Fortführung)
Analyse Scanning
Beispiel für Konstruktion
Beispiel (Fortführung)
Generalisierte Suffixbäume
Patricia–Baum S für alle Suffixe von m1$1,…,mk$k
(mögliche Ersetzung $i durch $).
 Anzahl der Knoten durch die Summe der
Stringlängenbeschränkt.
Einfügen eines Strings
Löschen eines Strings

Nutzt „Zwillingsknotenstruktur“
Komplexität
Sei S der generalisierten Suffixbaum nach
einer beliebigen Anzahl von Einfüge- und
Löschoperationen gespeichert sind und D die
Summe der Längen aller gespeicherter
Strings.
 Speicherplatz in O(D)
 Zeit O(|m|) für jede Einzeloperation auf m
Teilmengen-Wörterbücher
Sei D eine Menge von n Teilmengen von U.
Das Subset (Containment) Query Problem fragt
für eine gegebene Anfragemenge q  D ob
es ein p  D gibt mit q  p (p  q).
Ein Teilmengen-Wörterbuch ist eine
Datenstrukture die Einfügen von Teilmengen
von D erlaubt, und Subset und Containment
Queries unterstützt.
Partial Match Problem
Sei * ein „don’t care“ Zeichen, dass jedem
Zeichen eines gegebnen Alphabets
entspricht.
Gegeben eine Menge D von n Vektoren über
einem Alphabet Σ, fragt das Partial Match
nach einer Datenstruktur, die für jede Anfrage
q  Σ  {*} feststellt, ob es einen Eintrag p
in D gibt, so dass q auf des Wort p passt.
Äquivalenz
Das Partial-Match Problem ist äquivalent zu
dem Subset Query Problem
Beweis:
Tries für Partial Match
Hash-Table für Partial Match
Alle möglichen Elemente werden gehashed
Unlimited Branching Tree für
Subset und Containment Query
Operationen auf UBTs
Herunterladen