Was ist die String-Tiefe und was die Baum-Tiefe?
String-Tiefe
Baum-Tiefe
Was ist ein Generalisierter Suffix-Baum?
Ein Suffix-Baum über mehrere Strings
Was ist das Suffix Array SA[s] Was kann man damit machen?
SA(s) bezeiche das Suffix-Array für den String s. SA(s) hat genau |s| Einträge, je einen für jedes Suffix von s Die Einträge in SA(s) sind in lexikographischer Reihenfolge der Suffixe geordnet.
ALSO: Sortiere die Suffixe in lexigraphischer Reihenfolge –> erst anfangs Buchstaben alphabetisch dann 2 Buchstaben alphabetisch bis neuer 1. Anfangsbuchstabe usw. https://www.youtube.com/watch?v=uxA__b23t2w + https://www.youtube.com/watch?v=x6j44AtzFmU
Pattern Matching -> Binäre suche!
Suffix-tree aufstellen
Was ist das LCP?
Longest Common Prefix:
Das LCP-Array gibt an wie viel Übereinstimmung (von vorne kommend in Buchstaben gemessen) 2 aufeinanderfolgende Suffixe haben!
LCP-Array enthält Stringtiefe des tiefsten gemeinsamen Vorgängers
Wie kann Pattern matching erfolgen? Wieviele Möglichkeiten gibt es?
Wie kann man das Patternmatching mit dem Suffix Array verkürzen?
2 Möglichkeiten:
Algorithmus zum Pattern Matching mit Suffix-Array: Laufzeit bisher: O(|P|·log |s|), log |s| Vergleiche von Präfixen für binäre Suche, mit jeweils maximal |P| Zeichen-Vergleichen. (P ist das Pattern.)
Idee: Reduktion der Zeichen-Vergleiche durch Verwendung von LCP-Informationen, so dass Vergleich von Präfixen nicht mit erstem Zeichen beginnen muss.
LCP-Array enthält Stringtiefe des tiefsten gemeinsamen Vorgängers
Laufzeit lässt sich so auf O(|P| + log |s|) reduzieren. (Auf Beweis wird hier verzichtet.)
[mP] Wie viele Blätter hat ein Suffix-Baum über einem String s? und was sind innere knoten?
Er hat so viele Blattknoten wie eben Suffixe im dokument vorhanden sind!
Innere Knoten treten immer dann auf, wenn es eben 2 suffixe gibt, die gleich beginnen, aber dann unterschiedlich weitergeht
[mP] Welche Komplexität hat McCreight-Algorithmus zum Aufbau eines Suffix-Baumes über einem String s?
O(n2)
[mP] Wie läßt sich die Komplexität des McCreight-Algorithmus senken?
Mit Verweisen glaub ich! (korrekt)
Laufzeit: O(n²)
Laufzeit mit Suffixverweisen O(n) hier nicht behandelt
https://youtu.be/RNtLxlLFtvk?t=1h20m57s –> mit Patternmatching über Suffix Array + LCP?!
Laufzeit bisher: O(|P|·log |s|), log |s| Vergleiche von Präfixen für binäre Suche, mit jeweils maximal |P| Zeichen-Vergleichen. (P ist das Pattern.)
Idee: Reduktion der Zeichen-Vergleiche durch Verwendung von LCP-Informationen, so dass Vergleich von Präfixen nicht mit erstem Zeichen beginnen muss. Laufzeit lässt sich so auf O(|P| + log |s|) reduzieren. Also auf Länge des Patterns (P)und Tiefe des Suchverfahrens (log s)
[mP] Zeigen Sie: In einem Suffix-Array benachbarte Suffix-Paare haben ein längeres gemeinsames Präfix als alle anderen denkbaren Suffix-Paare.
ad
[mP] Konstruieren Sie den Suffix-Baum über einem String, z. B. ananas$
ad
Wie sind die Suchkosten beim Interval Matching vom Suffix Array
Wie lassen sich die Suchkosten reduzieren?
O( |P| * log |s|) –> Kosten fürs nach unten steigen mit log|s| und an jeder Stelle maximal |P| Vergleiche (Zahl der Vergleiche, die wir machen müssen bei Binärer Suche ist logarithmisch)
|P| = Länge des Patterns ⇒ Anzahl der Zeichenvergleiche
|s| = Anzahl der Suffixe im Dokument (wie oft wir nach unten steigen müssen = länge des Suchverfahrens)
Idee: Reduktion der Zeichen-Vergleiche durch Verwendung von LCP-Informationen, so dass Vergleich von Präfixen nicht mit erstem Zeichen beginnen muss.
Laufzeit lässt sich so auf O(|P| + log |s|) reduzieren.
Was ist ein Suffix-tree? und wozu braut man sie?
Wür was braucht man sie:
Suffixe von Strings spielen eine wichtige Rolle für eine große Zahl von Anwendungen,
Effiziente Speicherung von Suffixen erfordert
Was ist rechts-maximalität? (Suffix-tree)
Ein wiederholter Teilstring t von String s ist rechts-maximal, wenn es
Beispiel: t=mat, s=mathematik(h und i verschieden ⇒ also ok) , nicht aber t=ma. (t und t = gleich)
Die Pfad-Beschriftung jedes inneren Knotens im Suffix-Baum ST(s) entspricht solch einem rechts-maximalen Teilstring von s.
Wie ist der Aufbau des Suffix Baumes mit dem MCCreight Algorithmus?
Laufzeit: O(n²)
Laufzeit mit Suffixverweisen O(n) hier nicht behandelt
Kanten sind stets alphabetisch sortiert. Reihenfolge der Blätter deshalb = Sortierreihenfolge der Suffixe. ⇒ schnellere Suche
Wie funktioniert das Pattern matching mit dem Suffix Array und LCP (schnelle Variante)?
Pattern Matching ⇒ Binäre Suche auf dem Suffix Array
(wie index?)
https://opencast.informatik.kit.edu/engage/theodul/ui/core.html?id=f983950f-9e6f-4582-8295-e86d0374f7bfda
Wie können Bereichsanfragen/Intervallanfragen gemacht werden?
Wie wird das mit einem “Regulären Ausdruck” gemacht?
Mit dem Suffix Array und mit dem Suffix tree!!!
https://opencast.informatik.kit.edu/engage/theodul/ui/core.html?id=f983950f-9e6f-4582-8295-e86d0374f7bf
Suffix tree
und beim Regulären Ausdruck folgendes
Warum fängt man beim MCCreight Algorithmus mit dem längesten Suffix an? Wäre es nicht geschickter mit dem kürzesten anzufangen?
da