Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Das LCA – Problem in Suffixbäumen. K. Swist2 Überblick Definitionen Anwendungen Voraussetzungen Preprocessing Beantworten von LCA – Anfragen in konstanter.

Ähnliche Präsentationen


Präsentation zum Thema: "Das LCA – Problem in Suffixbäumen. K. Swist2 Überblick Definitionen Anwendungen Voraussetzungen Preprocessing Beantworten von LCA – Anfragen in konstanter."—  Präsentation transkript:

1 Das LCA – Problem in Suffixbäumen

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

3 K. Swist3 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.). 1 banane an ane e n e e

4 K. Swist4 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

5 K. Swist5 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

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

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

8 K. Swist8 Anwendungen Longest common extension 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

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

10 K. Swist10 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

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

12 K. Swist12 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:

13 K. Swist13 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

14 K. Swist14 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 h(1) = 1I(1) = 4 h(2) = 2I(2) = 2 h(3) = 1I(3) = 3 h(4) = 3I(4) = 4 h(5) = 1I(5) = 5 h(6) = 2I(6) = 6

15 K. Swist15 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. I(1) = 4 I(2) = 2 I(3) = 3 I(4) = 4 I(5) = 5 I(6) =

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

17 K. Swist17 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 (log 2 p)+1 Bits aufgefüllt, indem rechts eine Eins angehängt wird und entsprechend viele Nullen

18 K. Swist18 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)

19 K. Swist19 Preprocessing - A v A v ist eine O(log n) Bit lange Zahl, wobei Bit A v (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) = 4h(1) = 1A 1 = 001 I(2) = 2h(2) = 2 A 2 = 011 I(3) = 3h(3) = 1 A 3 = 111 I(4) = 4h(4) = 3 A 4 = 001 I(5) = 5h(5) = 1 A 5 = 101 I(6) = 6h(6) = 2 A 6 = 011

20 K. Swist20 Preprocessing - Algorithmus Eingabe: ein Baum T mit n Knoten 1. 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 2. 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 3. Erzeuge den kompletten binären Baum B und bilde jeden Knoten v aus T auf den Knoten I(v) in B ab 4. Berechne A v für jeden Knoten v in T.

21 K. Swist21 Preprocessing - Beispiel 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) = Pointer auf den Vater v I(v)

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

23 K. Swist23 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 x ij = XOR(i, j). Finde Position k (von links gezählt) des am weitesten links liegenden 1 – Bits in x ij. 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.

24 K. Swist24 Beantworten von LCA - Anfragen z.B. lca(5, 3): XOR(101, 011) = 110 k = 1 lca =

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

26 K. Swist26 Beantworten von LCA – Anfragen - Algorithmus ii.Wenn l = j, setze x = x (x und lca(x, y) liegen in der gleichen Gruppe) und gehe zu Schritt 4. iii.Sonst (l < j): Finde Position k des am weitesten links liegenden 1 – Bits in A x, 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. 4.Finde Knoten y, den am nächsten zu y liegenden Knoten aus der Gruppe von lca(x, y) wie in Schritt 3. 5.Wenn x < y, setze lca(x, y) = x; sonst lca(x, y) = y. Ausgabe: lca(x, y)


Herunterladen ppt "Das LCA – Problem in Suffixbäumen. K. Swist2 Überblick Definitionen Anwendungen Voraussetzungen Preprocessing Beantworten von LCA – Anfragen in konstanter."

Ähnliche Präsentationen


Google-Anzeigen