Konstruktion von Suffix Bäumen

Ähnliche Dokumente
Konstruktion von Suffix Bäumen

TU München. Hauptseminar: WS 2002 / Einführung in Suffix - Bäume

Algorithmen und Datenstrukturen 2

4.9.7 Konstruktion der Suffixbäume

Algorithmen und Datenstrukturen II

Algorithmische Bioinformatik 1

Logik. Gabriele Kern-Isberner LS 1 Information Engineering. TU Dortmund Wintersemester 2014/15 WS 2014/15

kontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung

4. Tries und kd-bäume

2. Woche Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung

String - Matching. Kapitel Definition

Effiziente Algorithmen und Komplexitätstheorie

Klausur. 18. Juli 2008, 10:15-12:15 Uhr. Name:... Matrikelnummer:... Anzahl beschriebener Blätter (ohne Aufgabenblatt):... D(p) : Y = p x X + p y

Fortgeschrittene Netzwerk- und Graph-Algorithmen

10. Übungsblatt zu Algorithmen I im SS 2010

Beweis des Pumping Lemmas

Repetitive Strukturen

n t(2k + 1) in den P k s r = n t(2k + 1) Rest

Vorlesung Datenstrukturen

Einführung - Parser. Was ist ein Parser?

Effiziente Algorithmen 2

Ogden s Lemma (T6.4.2)

Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8

Algorithmen II Vorlesung am

Wann sind Codes eindeutig entschlüsselbar?

Datenstrukturen und Algorithmen (SS 2013)

Ein Fragment von Pascal

Kontextfreie Sprachen. Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester Kontextfreie Sprachen

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Algorithmische Bioinformatik

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Algorithmen und Datenstrukturen

Algorithmen II Vorlesung am

Algorithmische Bioinformatik 1

Abgabe: (vor der Vorlesung) Aufgabe 7.1 (P) Binomial Heap

Algorithmen und Datenstrukturen 2

9 Minimum Spanning Trees

Übungen zur Vorlesung Datenstrukturen und Algorithmen SS 2006 Blatt 13

Suche in Texten. Verschiedene Szenarios: Dynamische Texte. Texteditoren Symbolmanipulatoren. Statische Texte

Algorithmentheorie. 15 Suchen in Texten (1)

Binärbäume und Pfade

Kombinatorische Optimierung

Einleitung. Kapitel 1

Matchings in Graphen. Praktikum Diskrete Optimierung (Teil 5)

2.2 Der Algorithmus von Knuth, Morris und Pratt

Freiwillige Übung zum Thema: Adaptive Huffman-Kodierung

1.3 Knuth-Morris-Pratt-Algorithmus

Informatik II, SS 2014

Vorlesung Datenstrukturen

8.4 Suffixbäume. Anwendungen: Information Retrieval, Bioinformatik (Suche in Sequenzen) Veranschaulichung: DNA-Sequenzen

Suchen und Sortieren Sortieren. Heaps

Aufgabe: Platz-effiziente Kompression von Textdaten

Algorithmen und Datenstrukturen Heapsort

Klammersprache Definiere

ADS: Algorithmen und Datenstrukturen 1

ADS: Algorithmen und Datenstrukturen 2

Lemma Für jede monotone Grammatik G gibt es eine kontextsensitive

Karlsruher Institut für Technologie. Klausur Algorithmen I

Kapitel 1. Exakte Suche nach einem Wort. R. Stiebe: Textalgorithmen, WS 2003/04 11

Name:... Vorname:... Matr.-Nr.:... Studiengang:...

3.2 Generischer minimaler Spannbaum-Algorithmus

4.4 Anwendungen von Suffixbäumen und Suffix-Arrays

1.5 Boyer-Moore-Algorithmus

Suche in Texten: Suffix-Bäume

3. Musterlösung. Problem 1: Boruvka MST

Algorithmen und Datenstrukturen

Vorlesung 4 BETWEENNESS CENTRALITY

Suchen in Texten. Naives Suchen Verfahren von Knuth-Morris-Pratt Verfahren von Boyer-Moore Ähnlichkeitssuchen Editierdistanz

Datenstrukturen (SoSe 12) Klausur (Modulabschlussprüfung)

Algorithmen und Datenstrukturen II. Suchen in Texten. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

4. Lernen von Entscheidungsbäumen

Algorithmentechnik - U bung 3 4. Sitzung Tanja Hartmann 03. Dezember 2009

6. Sich selbst organisierende Datenstrukturen

Algorithmen und Datenstrukturen (Informatik II) SS Klausur

Kürzeste-Wege-Algorithmen und Datenstrukturen

ADS: Algorithmen und Datenstrukturen 2

Grundzüge von Algorithmen und Datenstrukturen, WS 15/16: Lösungshinweise zum 13. Übungsblatt

Vorrangswarteschlangen:Operationen

2.7 Bucket-Sort Bucket-Sort ist ein nicht-vergleichsbasiertes Sortierverfahren. Hier können z.b. n Schlüssel aus

Theoretische Grundlagen der Informatik

a) Fügen Sie die Zahlen 39, 38, 37 und 36 in folgenden (2, 3)-Baum ein:

Isomorphie von Bäumen

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Copyright, Page 1 of 7 Heapsort

Grundlagen der Theoretischen Informatik

1 AVL-Bäume. 1.1 Aufgabentyp. 1.2 Überblick. 1.3 Grundidee

Datenstrukturen und Algorithmen SS07

Dynamisches Huffman-Verfahren

Vorlesung Geometrische Algorithmen Generierung von Nicht-uniformen Netzen Sven Schuierer

Kombinatorische Optimierung

Referat zum Thema Huffman-Codes

2. Klausur zur Vorlesung Theoretische Grundlagen der Informatik Wintersemester 2017/2018

Algorithmische Graphentheorie

Wintersemester 2004/ Februar 2005

Algorithmische Bioinformatik

Effizienter Planaritätstest Vorlesung am

Lernmodul 7 Algorithmus von Dijkstra

25. Minimale Spannbäume

24. Minimale Spannbäume

Übungsblatt 2 - Lösung

Transkript:

Konstruktion von Suffix Bäumen Prof. Dr. S. Albers Prof. Dr. Th. Ottmann 1

Ukkonen s Algorithmus: Impliziter Suffix Baum Definition: Ein impliziter Suffix Baum ist der Baum, den man aus dem Suffix Baum für t$ enthält indem man : (1) $ von den Markierungen der Kanten entfernt, (2) Kanten ohne Markierung entfernt, (3) Knoten mit nur einem Kind entfernt. 2

Ukkonen s Algorithmus: Impliziter Suffix Baum t = x a b x a $ 1 2 3 4 5 6 a x a b x a $ 1 $ a x b $ $ 4 3 6 $ 5 b x a $ 2 3

Ukkonen s Algorithmus: Impliziter Suffix Baum (1) Entfernen der Kantenmarkierung $ für t = x a b x a $ a x a b x a 1 a x b 4 3 6 5 b x a 2 4

Ukkonen s Algorithmus: Impliziter Suffix Baum (2) nicht markierten Kanten entfernen t = x a b x a $ 1 2 3 4 5 6 a x a b x a 1 a x b 3 b x a 2 5

Ukkonen s Algorithmus: Impliziter Suffix Baum (3) Knoten mit nur einem Kind entfernen t = x a b x a $ 1 2 3 4 5 6 x a b x a 1 a x b a b x a 3 2 6

Ukkonen s Algorithmus Sei t = t 1 t 2 t 3... t m Ukk arbeitet online: Der Suffix Baum ST(t) wird schrittweise durch Konstruktion einer Reihe von impliziten Suffix Bäumen für alle Präfixe von t konstruiert: ST(ε), ST(t 1 ), ST(t 1 t 2 ),..., ST(t 1 t 2... t m ) ST(ε) ist der leere implizite Suffix Baum. Er besteht nur aus der Wurzel 7

Ukkonen s Algorithmus Die Methode wird online genannt, weil in jedem Schritt der implizite Suffix Baum für ein Anfangsstück von t konstruiert wird ohne den Rest des Inputstrings zu kennen. Der Algorithmus arbeitet also inkrementell, da er den Input String zeichenweise von links nach rechts liest. 8

Ukkonen s Algorithmus Inkrementelle Konstruktion des impliziten Suffixbaumes: Induktionsanfang: ST(ε) besteht nur aus der Wurzel. Induktionsschritt: Aus ST(t 1... t i ) wird ST(t 1... t i t i+1 ), für alle i < m Sei I i der implizite Suffix Baum für t[1...i] Zuerst konstruiert man I 1 : Der Baum hat nur eine Kante, die mit dem Zeichen t 1 markiert ist. Die in Phase i+1 zu lösende Aufgabe ist, I i+1 aus I i für i = 1 bis m 1 zu konstruieren. 9

Ukkonen s Algorithmus Pseudo-code Formulierung von ukk: Konstruiere Baum I 1 for i = 1 to m 1 do begin {Phase i+1} end; for j = 1 to i +1 do begin {Erweiterung j} Finde das Ende des Pfades von der Wurzel, der mit t[j... i] markiert ist, im aktuellen Baum. Falls erforderlich, erweitere ihn durch Hinzufügen des Zeichens t[i+1], damit gewährleistet ist, dass der String t[j...i+1] im Baum ist. end; 10

Ziel: Verbesserung der Laufzeit von ukk Unterscheide zwischen impliziten und expliziten Erweiterungen In Phase i+1 werden alle impliziten Erweiterungen auf einmal in konstanter Zeit ausgeführt. Die Gesamtzahl aller (echten) expliziten Erweiterungen in allen m-1 Erweiterungs-Phasen kann durch O(m) beschränkt werden. Benutze Suffix-Links, um den Zeitaufwand pro expliziter Erweiterung (amortisiert) in konstanter Zeit auszuführen. Zeige, dass Suffix-Links während der expliziten Erweiterungen mit konstantem Zusatzaufwand eingefügt werden können, so dass jeder implizite Suffix Baum am Ende einer jeden Erweiterungsphase für alle inneren Knoten Suffix-Links hat. 11

Beispiel t = a c c a $ c a a c c a c c c c a c c a a c a 1 1 2 1 2 1 3 2 I 1 I 2 I 3 I 4 Schritt 1 Schritt 2 12

Ukkonen s Algorithmus Jede Erweiterung j wird so durchgeführt, dass man das Ende des Pfades von der Wurzel, gekennzeichnet mit t[j...i], findet und den Pfad durch das Zeichen t[i+1] erweitert. In Phase i+1 wird zuerst der String t[1...i+1] in den Baum eingefügt, gefolgt von den Strings t[2...i+1], t[3...i+1],... (entsprechend den Erweiterungen 1,2,3,... In Phase i+1) Erweiterung i+1 in Phase i+1 fügt das einzelne Zeichen t[i+1] in den Baum ein (es sei denn es ist schon vorhanden) 13

Ukk: Suffix Erweiterungs-Regeln Der Erweiterungs-Schritt j (in Phase i+1) wird nach einer der folgenden Regeln durchgeführt: Regel 1: Wenn t[j...i] in einem Blatt endet, wird t[i+1] an die Markierung der zum Blatt führenden Kante angehängt. Regel 2: Falls kein Pfad vom Ende von t[j...i] mit dem Zeichen t[i+1] anfängt, wird eine neue Kante zu einem neuen Blatt erzeugt, die mit dem Zeichen t[i+1] markiert wird. (Das ist die einzige Erweiterung, die die Anzahl der Blätter im Baum erhöht! Das Blatt repräsentiert bei Position j beginnende Suffixe.) Regel 3: Falls ein mit dem Zeichen t[i+1] markierter Pfad am Ende von t[j..i] beginnt, tut man nichts. (Denn dann tritt t[j i+1] tritt bereits im Baum auf.) 14

Beispiel t = a c c a $ t[1...3] = acc t[1...4] = acca t[1..4] = acca t[2..4] = cca a c c c c Erweitere Suffix 1 Regel 1 c c Erweitere Suffix 2 Regel 1 c c a I 3 2 1 2 1 t[3..4] = ca t[4..4] = a Erweitere Suffix 3 Regel 2 a c c a c a c a a c c a Regel 3 a ist bereits im Baum a c c a 1 a c c a c a 2 c a I 4 1 3 2 1 3 2 15

Beobachtung 1 Bei Durchführung von Phase i +1 (der Vorgang, durch den I i+1 aus I i konstruiert wird) kann man beobachten: (1) Sobald in Erweiterung j erstmals Regel 3 angewandt wurde, muss der Pfad, der mit t[j...i] im aktuellen Baum I i markiert ist, eine Fortsetzung mit Zeichen t[i+1] haben. Dann muss auch für jedes j j der Pfad, der mit t[j... i] markiert ist, ebenfalls eine Fortsetzung mit Zeichen t[i+1] haben. Daher wird Regel 3 auch für Erweiterung j für j = j+1... i+1 angewandt. Wenn man also einmal Regel 3 für eine Erweiterung j in Phase i +1 angewandt hat kann man diese Phase beenden. 16

Beobachtung 2 (2) Sobald man ein in I i ein Blatt erzeugt, bleibt dies ein Blatt in allen Bäumen I i für i > i. (Einmal ein Blatt, immer ein Blatt!) Denn, es gibt keine Regel für das Entfernen von Blättern t = a c c a b a a c b a. a c c a c c a I 4 a 1 3 2 17

Vermeiden unnötiger Schritte Folgerung: Blatt 1 wird in Phase 1 erstellt, daher gibt es in jeder Phase i + 1 eine Anfangssequenz von aufeinanderfolgenden Erweiterungen (angefangen bei Erweiterung 1) bei der Regel 1 oder Regel 2 angewandt wird. Sei j i die letzte Erweiterung in Phase i, die nach Regel 1 oder 2 erfolgt; d.h. jede Erweiterung j, mit j > j i, erfolgt nach Regel 3. Da jede Anwendung von Regel 2 ein neues Blatt erstellt, gilt nach Beobachtung 2: j i j i+1 Nicht alle Erweiterungen müssen explizit durchgeführt werden! 18

Explizite Erweiterungen Reihenfolge der expliziten Erweiterungen: Phase 1: berechne Erweiterungen j 1 = 1 Phase 2: berechne Erweiterungen j 1 + 1... j 2 Phase 3: berechne Erweiterungen j 2 +1... j 3... Phase i-1: berechne Erweiterungen j i-2 + 1... j i-1 Phase i: berechne Erweiterungen j i-1 + 1... j i In jeden zwei aufeinanderfolgenden Phasen gibt es höchstens einen Index, der in beiden Phasen betrachtet werden muss, um die erforderlichen Erweiterungen durchzuführen. 19

Implizite Erweiterungen Der Algorithmus kann nun verbessert werden: Die in Phase i+1 auszuführenden Erweiterungen j für j [1, j i ] basieren alle auf Regel 1 und es wird nur konstante Zeit benötigt, um all diese Erweiterungen implizit durchzuführen. (Benutze globale Variable zur Markierung der aktuellen Textlänge!) Falls j [j i +1, i+1] ist, sucht man das Ende des mit t[j...i] markierten Pfades und erweitert ihn mit dem Zeichen t[i+1] indem man Regel 2 oder 3 anwendet. Falls dabei Regel 3 angewandt wird setzt man nur j i+1 = j 1 und beendet Phase i+1. 20

Beispiel für implizite und exlpizite Erweiterungen Beispiel: Konstruktion des impliziten Suffix Baumes für t = pucupcupu 21

Struktur der Erweiterungs-Phasen t = pucupcupu i: 0 1 2 3 4 5 6 7 8 9 ε *p pu puc pucu pucup pucupc pucupcu pucupcup pucupcupu *u uc ucu ucup ucupc ucupcu ucupcup ucupcupu *c cu cup cupc cupcu cupcup cupcupu u *up upc upcu upcup upcupu p *pc pcu pcup pcupu Suffixe, die zu einer Erweiterung nach c cu cup *cupu Regel 2 führen, sind mit * markiert u up *upu Unterstrichene Suffixe markieren die letzte Erweiterung nach Regel 2 Suffixe, die eine Phase beenden (erstmalige Anwendung von Regel 3) sind blau markiert. p pu u 22

Beobachtungen Solange der Algorithmus explizite Erweiterungen ausführt, merkt man sich im Index j* den Index der gerade aktuell ausgeführten expliziten Erweiterung. Im Verlaufe der Ausführung des Algorithmus nimmt j* niemals ab, sondern kann zwischen zwei aufeinanderfolgenden Phasen höchstens gleich bleiben. Da es nur m Phasen gibt (m = t ), und j* durch m begrenzt ist, führt der Algorithmus daher nur 2m explizite Erweiterungen aus. 23

Ukkonen s Algorithmus: Verbesserung Revidierte Pseudocode Formulierung von uuk: Konstruiere Baum I 1 ; j* = 1; for i = 1 to m 1 do begin {Phase i+1} for j = j* +1 to i +1 do begin {Erweiterung j} Finde das Ende des Pfades von der Wurzel mit Markierung t[j... i] im aktuellen Baum. Falls erforderlich, erweitere ihn durch Hinzufügung des Zeichens t[i+1], damit gewährleistet wird, dass der String t[j...i+1] im Baum ist. j* = j; if Regel 3 wurde angewandt im Erweiterungsschritt j then j* = j 1 und beende Phase i+1; end; end; 24

Nutzung von Suffix-Links Nutze Suffix-Links zur Beschleunigung des Schritts: Finde das Ende des Pfades von der Wurzel mit Markierung t[j... i] im aktuellen Baum I i Starte bei Knoten v, der t[j-1 i] = x? in I i entspricht.? x? s(v) Falls t[j-1 i] in einem inneren Knoten v endet, folge Suffix-Link zu s(v)! v 25

Nutzung von Suffix-Links Sonst: Beginne beim kontrahierten Ort v von t[j-1 i], folge Suffix-Link und bestimme von dort aus t[j i], Falls neue innere Knoten erzeugt wurden, setzte Suffix-Links? x? s(v) v 26

Beispiel Beispiel: Konstruktion des impliziten Suffixbaums für acacag. 27

Beispiel: Nutzung von Suffix-Links a g ac ca g 6 gac g 5 gac g 1 3 2 4 acacgacacc. 28

Aufwandsabschätzung Mit der Hilfe von Suffix Links werden die Erweiterungen basierend auf Regel 2 oder Regel 3 vereinfacht. Jede explizite Erweiterung kann in amortierister Zeit O(1) ausgeführt werden (Begründung: Folgt man Suffix-Links, so kann man insgesamt höchstens so oft im Baum hinaufsteigen, wie man hinabsteigen kann; das sind aber nur O(m) Niveaus!) Weil nur 2m explizite Erweiterungen durchgeführt werden, beträgt die Gesamtlaufzeit von Ukkonen s Algorithmus O(m) (m = t ). 29

Echter Suffix Baum Der echte Suffix-Baum: Der endgültige implizite Suffix Baum I m kann in einen wirklichen Suffix Baum in Zeit O(m) umgewandelt werden: (1) Füge ein Terminalsymbol $ ans Ende vom String t ein (2) Lasse Ukkonen s Algorithmus mit diesem Zeichen weiterlaufen Das Resultat ist der echte Suffix Baum in dem kein Suffix ein Prefix eines anderen Suffix ist und jedes Suffix in einem Blatt endet. 30