390 likes | 490 Views
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
E N D
SpezialvorlesungSuchalgorithmen Thema: Zeichenkettensuche und Wörterbücher Stefan Edelkamp
Ü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 Wbesitzt 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 Nachfolgermit seinem Elter verschmolzen ist. Die durch die Elimination von Knoten mit Grad zwei gewonnene Struktur wird Patricia-Baum genannt (Patricia:Akronym aus practical algorithm to retrieve information coded in alphanumeric)
PlatzkomplexitätSuffixbaum • 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 Zeichenkettem: Knoten im Suffixbaum am Ende des mit m bezeichneten Weges (falls er existiert). Erweiterung einer Zeichenkettem: jede Zeichenkette, die als Präfix hat. Erweiterter Orteiner Zeichenkettem: Ort der kürzesten Erweiterung von m, deren Ort definiert ist. Kontraktierter Ort einer Zeichenkettem: Ort des längsten Präfixes von m, dessen Ort definiert ist.
Aufteilung von Strings Suffix sufiist der an Position i beginnendes Suffix von W mit suf1 = W. Stringheadiist der längste Präfix von sufi, der auch Präfix von sufjfür ein j < iist und Stringtaili 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äfixp 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 pgrößter gemeinsame Präfix.
Suffixbaum KonstruktionNaives 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 Tiund 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‘scherAlgorithmus …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 Tigefunden 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= amfür ein Symbol aund eine (evtl. leere) Zeichenkette mist, dann ist mein Präfix von headi+1. Beweis:Sei headi = am, dann existiert ein j < i, so dass a Präfix von sufiund 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 headiin 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−1beginnen kann.
Blick mit der Lupe Ist headinicht leer, so bezeichnet αi die Konkatenation der Kantenbeschriftungen des Weges zum kontraktierten Ort von headiohne den ersten Buchstaben ai.Ferner sei βi = headi − ai αi- Ist headinicht leer, haben wir in Ti: headi+1 = αiβiγi+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+1ist leer
Laufzeitanalyse Der Algorithmus von McCreight liefert in Zeit O(|W|) einen Suffixbaum für W.
Generalisierte Suffixbäume Patricia–Baum S für alle Suffixe von m1$1,…,mk$k (mögliche Ersetzung $idurch $). Anzahl der Knoten durch die Summe der Stringlängenbeschränkt.
Löschen eines Strings • Nutzt „Zwillingsknotenstruktur“
Komplexität Sei Sder generalisierten Suffixbaum nach einer beliebigen Anzahl von Einfüge- und Löschoperationen gespeichert sind und Ddie 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:
Hash-Table für Partial Match Alle möglichen Elemente werden gehashed