Das LCA – Problem in Suffixbäumen

Slides:



Advertisements
Ähnliche Präsentationen
8. Termin Teil B: Wiederholung Begriffe Baum
Advertisements

Randomisierte Algorithmen Präfix Suche und Konsistentes Hashing
Falls Algorithmen sich selbst rekursiv aufrufen, so kann ihr Laufzeitverhalten bzw. ihr Speicherplatzbedarf in der Regel durch eine Rekursionsformel (recurrence,
Kapitel 3 Arithmetische Schaltkreise
Prof. Dr. S. Albers Prof.Dr.Th Ottmann
Polynomial Root Isolation
Algebraische Zahlen: Exaktes Rechnen mit Wurzeln
Schnelle Matrizenoperationen von Christian Büttner
Claudio Moraga; Gisbert Dittrich
Kapitel 6: Klassifizierung von Sortiertechniken
7. Natürliche Binärbäume
Suche in Texten (Stringsuche )
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister)
Sortierverfahren Richard Göbel.
Das Halteproblem. Gibt es einen Algorithmus, mit dem man für jedes beliebig vorgegebene Programm R und für jede beliebig vorgegebene Eingabe E entscheiden.
Algorithmus. Ein Kochrezept, zum Beispiel: Kartoffelbrei.
Konstruktion von Suffix Bäumen
Suche in Texten: Suffix-Bäume
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
Konstruktion von Suffix Bäumen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (19 - Analyse natürlicher Bäume) Prof. Th. Ottmann.
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten Suffix –Tree –Konstruktion Ukkonen Algorithmus.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Bäume: Grundlagen und natürliche Suchbäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 - AVL-Bäume: Entfernen, Bruder-Bäume) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten Suffix - Bäume.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (17 –Turingmaschinen) Prof. Dr. Th. Ottmann.
Informatik II – Kapitel 13
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II Vorlesung In welcher Masche liegt der Punkt p?
Kap. 6.2 Binäre B-Bäume Ullmann: (2, 3) - Bäume
Katja Losemann Chris Schwiegelshohn
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Hauptseminar Automaten und Formale Sprachen
Exact String Matching II1 Exact String Matching: A Deeper Look at Classical Methods Erweiterte Anwendungen zu Boyer-Moore und Knuth-Morris-Pratt Hauptseminar.
Huffman Entropie-Codierung Codierung mit variabler Länge
Punktbeschriftung mit vier Rechtecken gleicher Höhe (Anzahlmaximierung) Julia Löcherbach.
Effiziente Algorithmen
2. Die rekursive Datenstruktur Baum 2
Effiziente Algorithmen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II Vorlesung 7 SS 2000 Punkt-in-Polygon-Verfahren I (Trapezkarte)
Effiziente Algorithmen
Effiziente Algorithmen
Effiziente Algorithmen
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/ /23.1.
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Information und Kommunikation
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Information und Kommunikation
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Binäre Bäume Louis Moret und Reto Huber, 5. 11
Graphen und Bäume.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation III Vorlesung 1 WS 2001/02 Punkt-in-Landkarte I (Streifenkarte)
Binärer Baum, Binärer Suchbaum I
Algorithmen und Datenstrukturen Prof. Dr. Ralf Möller Universität zu Lübeck Institut für Informationssysteme Stefan Werner (Übungen) sowie viele Tutoren.
Binärbäume.
Aufgabe 1. Herausforderungen I Persistente Datenspeicherung: Möchte man jeden Morgen alle Käufe und Verkäufe neu zusammensuchen? Sehr große Datenmengen:
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 3 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 1 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Klausur „Diskrete Mathematik II“
Vorlesung AVL-Bäume/Algorithmen-
Vorlesung AVL-Bäume/Algorithmen-
Laufzeitverhalten beim Sortieren
2. Die rekursive Datenstruktur Baum 2.1 Von der Liste zum Baum
 Präsentation transkript:

Das LCA – Problem in Suffixbäumen

Überblick Definitionen Anwendungen Voraussetzungen Preprocessing Beantworten von LCA – Anfragen in konstanter Zeit K. Swist

Definitionen Ein Suffixbaum T für einen String S (|S| = n) ist ein Baum mit n Blättern, markiert mit 1, …, n Kanten, beschriftet mit nichtleeren Substrings von S innere Knoten haben mind. 2 Kinder Alle Label der Kanten von einem Knoten aus beginnen mit unterschiedlichen Zeichen. Konkatenation der Label der Kanten auf einem Pfad von der Wurzel zu einem Blatt i ist gleich S[i... n] (also das Suffix von S, das an Position i startet.). e banane an n 6 1 ane e e 2 4 5 ane 3 K. Swist

Definitionen Ein Knoten u ist Vorfahre eines Knotens v, wenn u sich auf dem Pfad von der Wurzel zu v befindet. Insbesondere ist jeder Knoten Vorfahre von sich selbst. Ein echter Vorfahre von v ist ein Vorfahre, der nicht v selbst ist. u v K. Swist

Definitionen Der tiefste gemeinsame Vorfahre (lowest common ancestor, lca) zweier Knoten x und y ist der tiefste Knoten in T, der sowohl Vorfahre von x, als auch von y ist. lca(x, y) x y K. Swist

Definitionen Ein vollständiger binärer Baum B ist ein Baum, in dem jeder innere Knoten genau zwei Kinder hat. K. Swist

Überblick Definitionen Anwendungen Voraussetzungen Preprocessing Beantworten von lca – Anfragen in konstanter Zeit K. Swist

Anwendungen Longest common extension Palindrome gegeben zwei Strings S1 und S2 finde zu beliebigen Indexpaaren (i, j) den längsten Match von S1[i..] und S2[j..] Palindrome gegeben ein String S finde alle maximalen Palindrome in S Komplementäre Palindrome K. Swist

Überblick Definitionen Anwendungen Voraussetzungen Preprocessing Beantworten von lca – Anfragen in konstanter Zeit K. Swist

Voraussetzungen für den Algorithmus Operationen in O(1) Zeit auf Zahlen der Länge  O(log n): lesen, schreiben, adressieren von Zahlen vergleichen, addieren, subtrahieren, multiplizieren, dividieren von zwei Zahlen Bitoperationen: AND, OR, XOR shift rechts, links Erzeugen einer Maske von aufeinander folgenden Einsen Finden der am weitesten rechts oder links liegenden Eins in einer Binärzahl K. Swist

Überblick Definitionen Anwendungen Voraussetzungen Preprocessing Beantworten von lca – Anfragen in konstanter Zeit K. Swist

Preprocessing – Umwandeln von T in einen vollständigen Binärbaum B Depth – first search numbers: Nummerieren der Knoten eines Baumes T nach ihrem Auftreten bei der Tiefensuche: 5 6 4 3 2 1 001 100 110 101 011 010 K. Swist

Preprocessing – h(v) Für jede Nummer v bezeichnet h(v) die Position (von rechts) des ersten 1 – Bits in der Binärdarstellung von v. h(1) = 1 h(2) = 2 h(3) = 1 h(4) = 3 h(5) = 1 h(6) = 2 5 6 4 3 2 1 001 100 110 101 011 010 K. Swist

Preprocessing – I(v) Für einen Knoten v in T bezeichnet I(v) den Knoten w in T, sodass h(w) maximal über alle Knoten im Unterbaum unter v ist. 5 6 4 3 2 1 001 100 110 101 011 010 h(1) = 1 I(1) = 4 h(2) = 2 I(2) = 2 h(3) = 1 I(3) = 3 h(4) = 3 I(4) = 4 h(5) = 1 I(5) = 5 h(6) = 2 I(6) = 6 K. Swist

Preprocessing - Gruppen Eine Gruppe besteht jeweils aus allen Knoten, die den gleichen I – Wert haben. Der Kopf einer Gruppe ist der Knoten, der am nächsten zur Wurzel liegt. 5 6 4 3 2 1 001 100 110 101 011 010 I(1) = 4 I(2) = 2 I(3) = 3 I(4) = 4 I(5) = 5 I(6) = 6 K. Swist

Preprocessing Sei B ein vollständiger binärer Baum mit Knotentiefe d = log2n – 1. (n = Anzahl der Knoten im Suffixbaum T) Sei p die Anzahl der Blätter von B. Jeder Knoten v bekommt eine (log2p)+1 Bit lange Pfadnummer, die eindeutig den Pfad von der Wurzel zu v angibt. K. Swist

Preprocessing - Pfadnummern Von links gezählt bezieht sich das i – te Bit auf den i – ten Knoten auf dem Pfad von der Wurzel zu v: 0 bedeutet Verzweigung nach links, 1 nach rechts Jede Pfadnummer wird dann zu (log2p)+1 Bits aufgefüllt, indem rechts eine Eins angehängt wird und entsprechend viele Nullen. 1 7 5 6 4 2 3 001 101 111 110 011 100 010 K. Swist

Preprocessing - Pfadnummern Pfadnummern können auch rekursiv vergeben werden: nummeriere zuerst rekursiv das linke Kind, dann die Wurzel, dann rekursiv das rechte Kind. Bei der Konstruktion von B werden nur die Knoten bezeichnet, auf die ein Knoten aus T abgebildet wird (also nur die Nummern, die als I – Wert in T vorkommen). 1 7 5 6 4 2 3 001 101 111 110 011 100 010 K. Swist

Preprocessing - Av Av ist eine O(log n) Bit lange Zahl, wobei Bit Av(i) = 1 gdw. Knoten v hat einen Vorfahren in T, der auf Tiefe i in B abgebildet wird d. h. v hat einen Vorfahren u, sodass h(I(u)) = i. I(1) = 4 h(1) = 1 A1 = 001 I(2) = 2 h(2) = 2 A2 = 011 I(3) = 3 h(3) = 1 A3 = 111 I(4) = 4 h(4) = 3 A4 = 001 I(5) = 5 h(5) = 1 A5 = 101 I(6) = 6 h(6) = 2 A6 = 011 K. Swist

Preprocessing - Algorithmus Eingabe: ein Baum T mit n Knoten Tiefensuche in T: Vergeben der depth – first search numbers Berechnen von h(v) für jeden Knoten v Setze für jeden Knoten einen Pointer auf seinen Vater Bottom – up Algorithmus Berechne I(v) für jeden Knoten v Für jede Nummer k, sodass ein v existiert mit I(v) = k, setze L(k) als Pointer auf den Kopf der Gruppe, die Knoten k enthält Erzeuge den kompletten binären Baum B und bilde jeden Knoten v aus T auf den Knoten I(v) in B ab Berechne Av für jeden Knoten v in T. K. Swist

Preprocessing - Beispiel 001 5 6 4 3 2 1 100 110 101 011 010 h(1) = 1; I(1) = 4 h(2) = 2; I(2) = 2 h(3) = 1; I(3) = 3 h(4) = 3; I(4) = 4 h(5) = 1; I(5) = 5 h(6) = 2; I(6) = 6 Pointer auf den Vater v  I(v) K. Swist

Überblick Definitionen Anwendungen Voraussetzungen Preprocessing Beantworten von lca – Anfragen in konstanter Zeit K. Swist

Beantworten von LCA - Anfragen lca(i, j) in B: i und j sind Pfadnummern (binäre Darstellung; Länge d) Prüfen, ob i Vorfahre von j oder umgekehrt Sei xij = XOR(i, j). Finde Position k (von links gezählt) des am weitesten links liegenden 1 – Bits in xij. Links von k stehen Nullen, also sind die Pfade von der Wurzel bis zur k – ten Verzweigung gleich. Folglich besteht die Pfadnummer von lca(i, j) aus den ersten (k – 1) Zeichen von i (oder j), einer Eins und dann d – k – 1 Nullen. K. Swist

Beantworten von LCA - Anfragen z.B. lca(5, 3): XOR(101, 011) = 110  k = 1  lca = 100 5 6 4 2 3 101 110 011 100 010 K. Swist

Beantworten von LCA – Anfragen - Algorithmus Eingabe: zwei Knoten x und y in T Finde b = lca(I(x), I(y)) in B. Finde die kleinste Position j  h(b), sodass sowohl Ax, als auch Ay an Position j eine Eins haben. j ist dann h(I(lca(x, y))). Finde Knoten x‘, den am nächsten zu x gelegenen Knoten, der in der gleichen Gruppe wie lca(x, y) liegt wie folgt: Finde Position l des am weitesten links liegenden Eins – Bits in Ax. (l = h(I(x))) K. Swist

Beantworten von LCA – Anfragen - Algorithmus Wenn l = j, setze x‘ = x (x und lca(x, y) liegen in der gleichen Gruppe) und gehe zu Schritt 4. Sonst (l < j): Finde Position k des am weitesten links liegenden 1 – Bits in Ax, das noch rechts von j liegt. Entwickle eine Zahl w bestehend aus den Bits von I(x) links von Position k gefolgt von einer Eins, aufgefüllt mit Nullen. Suche Knoten L(w) und setze Knoten x‘ als Vater von L(w) in T. Finde Knoten y‘, den am nächsten zu y liegenden Knoten aus der Gruppe von lca(x, y) wie in Schritt 3. Wenn x‘ < y‘, setze lca(x, y) = x‘; sonst lca(x, y) = y‘. Ausgabe: lca(x, y) K. Swist