(a, b)-Bäume / 1 Szenario: Datenmenge ist so groß, dass sie auf der

Werbung
(a, b)-Bäume / 1
Szenario:
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Datenmenge ist so groß, dass sie auf der
Festplatte abgespeichert werden muss.
Konsequenz: Kommunikation zwischen Hauptspeicher und
Festplatte
- geschieht nicht Byte für Byte, sondern Seite
für Seite (1 Seite = 2048 oder 4096 Bytes, Paging)
ist etwas effizienter, falls auf aufeinander folgende
Seiten zugegriffen wird,
- ist um Faktor 100 - 1000 langsamer als interne
Zugriffe auf Hauptspeicher.
Aufgabe: Organisiere Daten auf Platte, so dass möglichst wenig
Paging notwendig wird. (I/O-effiziente Datenstrukturen)
(a, b)-Bäume / 2
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Definition Seien a, b ∈ N, a ≥ 2, 2a - 1 ≤ b.
Ein Baum T heißt (a, b)-Baum, falls gilt:
(i)
Alle Blätter von T haben gleiche Tiefe.
(ii)
Alle Knoten haben höchstens b Kinder.
(iii)
Die Wurzel hat mindestens 2 Kinder, alle anderen
Knoten haben mindestens a Kinder.
(a, b)-Bäume / 3
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
T ist Suchbaum für die Menge S = {x1, ..., xn}, x1 < x2 < ... < xn ,
falls gilt:
(iv)
In einem Blatt sind eine Anzahl von Schlüsseln
gespeichert mit a-1 ≤ ≤ b-1.
(v)
In einem inneren Knoten mit Kindern sind - 1 Schlüssel
in aufsteigend geordneter Reihenfolge gespeichert.
(vi)
Falls in v die Schlüssel x1 < x2 < ... < x -1 gespeichert
sind, sind im i-ten Teilbaum nur Schlüssel aus
- i=1:
(-∞ , x1)
- 1 < i ≤ -1:
(xi-1, xi )
- i=
(x , ∞ )
gespeichert.
Universität Paderborn
(a, b)-Bäume / 4
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Beispiel: Ein (2,3) Baum
I
G
A
O,T
H
L, M
R,S
U
(a, b)-Bäume / 5
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Bemerkung: T sei (a, b)-Baum mit n Knoten. Dann gilt:
n +1
logb (n + 1) ≤ Tiefe (T) ≤ loga
+1
2
Satz Die Operationen Insert, Delete, Search können in
(a, b)-Bäumen so implementiert werden, dass nur auf O (loga (n))
viele Seiten, je konstant oft zugegriffen werden muss.
Die Bearbeitungszeit pro Seite ist O (log(a)) bei Search, O (a)
sonst.
(a, b)-Bäume / 6
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Search (x):
Starte bei der Wurzel.
Angekommen in v mit Schlüsseln x1, ..., x gehe in den i-ten Ast,
falls x ∈ (xi-1, xi) ist (bzw. (- ∞ , x1) für i = 1,
(x , ∞ ) für i = l+1).
Falls x = xi → gefunden → STOP.
Falls Nil-Zeiger erreicht wird → Suche erfolglos → STOP.
# Seiten: O (Tiefe (T)) = O (loga (n)).
Zeit pro Seite: O (log (a)).
(a, b)-Bäume / 7
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Insert (x):
1.
2.
(nach erfolgloser Suche, Ende der Suche
im i-ten Nilzeiger von Blatt v.)
Hänge x als i-ten Sohn an v.
→ x hängt auf zu tiefem Level.
Füge x in die Schüssel x1 < ... < x in v ein.
→ x1 < ... < xi-1 < x < xi < ... < x
Fall a) < b - 1
→ Füge neuen i-ten Zeiger ein,
alter i-ter Zeiger → neuer i + 1-ter Zeiger
alter + 1-ter Zeiger → neuer + 2-ter Zeiger
→ v hat + 1 ≤ b - 1 Schlüssel und + 2 ≤ b Zeiger.
→ fertig, STOP.
(a, b)-Bäume / 8
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Fall b) = b-1
Splitte v in 2 Knoten wie folgt:
(sei (x1 ,..., xi-1 , x, xi ,... ,< xb-1) = (y1, ..., yb))
b 
Und füge y  2  in Vater von v rekursiv, nach gleichem
Verfahren ein.
Falls v Wurzel ist, wird sie gesplittet,
b
y  
2
wird neue Wurzel.
(Beachte: Wurzel darf Grad 2 haben!)
Zeit: Pro Schritt entlang des Weges zur Wurzel Zeit O (a).
# Schritte = Tiefe des Baumes = O (loga (n)).
(a, b)-Bäume / 9
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Delete (x): (nach erfolgreicher Suche, x = yi von (yi , ..., y )
in Knoten v.)
Falls v kein Blatt ist, vertausche x mit x‘ = max {z ∈ S,
z < yi}. Wir müssen nun x aus v‘ streichen.
Fall a) v‘ hat ≥ a viele Schlüssel → Streiche x, STOP.
Fall b)v‘ hat a - 1 Schlüssel. → Streiche x.
Dann verletzt das Streichen die Regel.
Fall b1) Ein direkter Bruder v‘‘ von v‘ (oBdA der rechte) hat
≥ a Schlüssel.
=> Verschieben
(a, b)-Bäume / 9.1
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Fall b2) Beide direkten Brüder haben a-1 Schlüssel.
→ Verändere v‘ und den rechten Bruder v‘‘ wie folgt:
Streiche (rekursiv) zi aus v
(= Vater von v‘, v‘‘). Falls v die Wurzel ist, und durch
das Streichen in Fall b2) leer wird, wird die Wurzel
gestrichen, und der (dann einzige) Sohn der Wurzel
wird neue Wurzel.
=> Verketten
Zeit:
Pro Schritt O (a)
# Schritte: O (loga (n)).
Universität Paderborn
Skip - Listen /1
• X = (x1 < x2 < …..
• Benutze Lineare Listen
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
< xn ) soll verwaltet werden
Lo,...,Lh,
xi wird in Lo, L1, ..., Lh (xi) - 1 verwaltet,
jedes Li ist aufsteigend sortiert.
• Xi : Menge der Elemente in Li,
es gilt : X = Xο ⊇ X1 ⊇ ... ⊇ Xh
• h (x) = “ Höhe von x "
Universität Paderborn
Skip-Listen / 2
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Insbesondere gilt also: X0 = X, Xο ⊇ X1 ⊇ ... ⊇ Xh
Beispiel:
L3
−∞
L2
L1
L0
5
8
14
10
∞
21
16
25
Eine Skipliste für X = {5, 8, 10, 14, 16, 21, 25} mit h = 4, h(5) = 2,
h(8) = 3, h (10) = 1, h(14) = 3, h(16) = 1, h(21) = 4, h(25) = 2.
Skip-Listen / 3
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Search (x):
i ← h - 1, Left ← − ∞ , „gefunden“ = false
Solange i ≥ 0 und „nicht gefunden“:
Suche in Li, startend in Left, bis zuerst ein
y ≥ x gefunden ist.
Falls x = y, dann „gefunden“ = true; gebe x aus.
Sonst: Left → Prev (y); i ← i - 1.
/* Falls x ∈ X gilt, ist x ≥ Left. */
Falls „gefunden“ = false, gebe Fehlermeldung aus.
Skip-Listen / 4
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Insert (x) :
(i) Erzeuge h (x):
Werfe eine Münze (Wahrscheinlichkeit für „Kopf“ = ½)
so oft, bis das erste mal „Kopf“ erscheint.
h (x) : = # Würfe
(ii) Füge x in den sortierten Listen Lo,.....Lh (x) - 1) ein:
– Falls h (x) > h, erzeuge Listen Lh,....,Lh (x)-1
– Search (x) (liefert Positionen in Lo,.....hh (x) - 1)
wo x hingehört)
– Füge an gefundenen Positionen x ein
(Zeit pro Einfügung:
O (1) )
Skip-Listen / 5
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Delete (x):
(i) Search (x) (liefert Position von x in Lo,...., Lh (x) )
(ii) Streiche (x) aus → Lo,....., Lh (x)
(Zeit pro Streichung: O (1) )
Zeit für Delete (x) =
= O (Zeit für Search (z) ) für ein ∈ (xi, xi+1) , x = xi
Dieses ist die teuerste Operation!
Skip-Listen / 6
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Somit reicht es, die Laufzeitanalyse für Search (z) für ein
z ∉ X durchzuführen
a) Die erwartete Höhe H (n) einer Skip-Liste für
n Elemente ist O (log(n))
b) Die erwartete Zahl von Zeigern in einer Skip-Liste mit
n Elementen ist höchstens 2n + O (log(n))
Eine Skip-Liste für n Elemente hat erwartete Größe O (n)
und erwartete Zeit pro Operation O (log (n))
Bäume + Graphen / 1
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Definitionen:
gerichteter Graph, ungerichteter Graph,
Vorgänger, Nachfolger, Grad, Ingrad, Outgrad, Weg,
einfacher Weg, Kreis
Zusammenhang, starker Zusammenhang,
Zusammenhangskomponenten,
starke Zusammenhangskomponenten
Baum, Wurzelbaum
Bäume + Graphen / 2
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Implementationen von Graphen 1 : Adjazenzmatrix:
G = (V,E) , V = {1,......, n}
→ n x n - Matrix A mit
1 (i, j ) ∈ E
A[i, j ] = 
sonst
0
heisst Adjazenzmatrix.
Operationen: (i, j) ∈ E ?
Zeit 0(1)
Berechnung von Grad, Ingrad, Outgrad: 0 (n)
Platz: 0 ( n2 )
→ gut für dichte Graphen
Bäume + Graphen / 3
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Implementationen von Graphen 2 : Adjazenzlisten
Array A von n linearen Listen,
A [ i ] enthält alle Nachbarn / Nachfolger von i
Operationen : (i, j) ∈ E ?
Zeit 0 (Grad (i) )
Berechnung von Grad (i) , Outgrad (i)
0 (Grad (i)) , 0 (Outgrad (i))
Berechnung von Ingrad (i) : 0 (IEI)
Platz:
→
0 ( n + IEI )
gut für dünne Graphen
Bäume + Graphen / 4
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Wurzelbäume:
Die Menge W aller Wurzelbäume ist die kleinste Menge, für die gilt:
1. Der Graph, der aus einem Knoten v besteht, ist ein
Wurzelbaum, v ist seine Wurzel
2. Falls T1...,Tl ∈ W sind, mit Wurzeln v1,...,vl und v ein neuer
Knoten, so ist auch der Graph aus W, der aus T1,...,Tl und v
entsteht, wenn wir v als Wurzel wählen, und Kanten (v,vi), i = 1,...,l
sowie alle weiteren Knoten und Kanten aus T1,...,Tl hinzufügen.
Als Grad eines Wurzelbaums bezeichnen wir den maximalen Outgrad
seiner Knoten. Ein binärer Baum ist ein Wurzelbaum von Grad 2.
Ein d-ärer Baum ist ein Wurzelbaum vom Grad d.
Die Tiefe eines Wurzelbaums ist die Länge eines längsten Weges von
der Wurzel bis zu einem Blatt.
Bäume + Graphen / 5
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Eigenschaften von Wurzelbäumen:
• Ein d-ärer Baum der Tiefe t hat höchstens
d t +1 − 1
1 + d + d + ... + d =
d −1
viele Knoten.
Diese Knotenzahl wird erreicht, falls T ein vollständiger,
balancierter d-ärer Baum íst, d.h., wenn jeder Knoten
bis auf die Blätter Grad d haben, und der Weg von
der Wurzel zu jedem Blatt Länge t hat.
2
t
• Ein zusammenhängender Graph mit n Knoten ist genau
dann ein Baum, wenn er n - 1 Kanten hat.
Bäume + Graphen / 6
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Systematisches Durchsuchen von Bäumen
Seit T ein Wurzelbaum mit Wurzel v, die Kinder v1,...,vd
von v seien Wurzeln der Teilbäume T1,...Td.
Wir definieren folgende drei Reihenfolgen (Orders)
der Knoten von T (rekursive Definitionen):
Postorder: Post(T) := Post(T1),..., Post(Td), v
Preorder: Pre(T) := v, Pre(T1),...,Pre(Td)
Inorder:
In(T) := In(T1), v, In(T2),...In(Td)
Bäume + Graphen / 7
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Satz
a) Preorder und Inorder zusammen beschreiben Wurzelbäume
nicht eindeutig.
b) Preorder und Inorder beschreiben binäre Wurzelbäume
eindeutig.
c) Preorder und Postorder beschreiben Wurzelbäume
eindeutig.
Tiefensuche / 1
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
G = (V,E) Graph, V = {1,...,n} , M [1 : n ] Array, m Variable,
zu Beginn: M [ i ] = o für alle i, m = o
Tiefensuche (Depth First Search, DFS)
DFS (G)
Solange m < n ist,
Suche minimales i > m mit M [ i ] = 0; m ← i;
DFS (G, i).
DFS (G, i)
M [ i ] ← 1;
Für alle Nachbarn/Nachfolger j von i mit M [ j ] = 0:
DFS (G,j).
Tiefensuche / 2
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
• DFS (G) besucht jeden Knoten genau ein mal.
• Zeit , falls G als Adjazenzliste gegeben ist:
O (|V| + |E|)
• DFS (G) kann Knoten von G durchnummerieren:
DFS - Nr. (i) = r ⇔ i ist der r-te durchlaufene Knoten.
Tiefensuche / 3
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
DFS (G) kann Kanten von S in vier Klassen zerlegen
Baumkanten: Kanten, die im Algorithmus genutzt werden,
um zu einem noch nicht besuchten Knoten zu gelangen.
Erkennung: (i,j) ist Baumkante, falls in DFS (G,i) DFS (G,j)
aufgerufen wird.
Rückkanten: Kanten (i, j), für die es einen Weg von j nach i
über Baumkanten gibt.
Erkennung: In DFS (G,i) wird DFS (G, j) nicht aufgerufen,
obwohl (i, j) Kante ist, (d.h. j war bereits früher besucht
worden) und DFS-Nr (j) < DFS-Nr (i).
Vorwärtskanten: Kanten (i,j), die keine Baumkanten sind, für die es
aber einen Weg i nach j über Baumkanten gibt.
Erkennung: In DFS (G,i) wird DFS (G,j) nicht aufgerufen, obwohl
(i,j) Kante ist, und DFS-Nr (i) < DFS-Nr (j).
Kreuzungskanten: alle restlichen Kanten.
Tiefensuche / 4
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Satz: DFS ist ein Rahmenprogramm, das bei Eingabe
eines Graphen G in Adjazenzlistendarstellung in
O (n + |E|) Schritten alle Knoten durchläuft, ggf. die
DFS-Nummern definiert, und die Kanten als Vorwärts-,
Rück-, Baum- oder Kreuzungskanten markiert.
Satz: Kreisfreiheit von Graphen kann in Zeit O (n + |E|)
getestet werden.
Beweis: Es gilt
Lemma a) Ein ungerichteter Graph ist zykelfrei, genau dann
wenn er ein Wald ist, d.h. nur Baumkanten enthält.
b) Ein gerichteter Graph ist zykelfrei, genau dann wenn er
keine Rückkanten enthält.
Tiefensuche / 5
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Satz Ungerichtete Graphen können in Zeit O (n + |E|)
auf Zusammenhang, gerichtete Graphen auf starken
Zusammenhang getestet werden.
Lemma Ein gerichteter Graph ist genau dann stark
zusammenhängend, wenn es für jeden Knoten v einen
Weg von 1 nach v und einen von v nach 1 gibt.
Also: Sei GR der Graph, der aus G entsteht, falls wir die
Richtung jeder Kante umdrehen.
Nach Lemma 6.3 ist G stark zusammenhängend, falls
DFS (G,1) und DFS (GR,1) alle Knoten besuchen.
Breitensuche
Universität Paderborn
Theoretische Informatik
Prof. Dr. rer. nat. Burkhard Monien
Breadth First Search BFS
Durchläuft, startend von einem Knoten, erst
alle seine Nachfolger, dann deren Nachfolger, usw.
Viele Probleme, die mit DFS gelöst werden können,
können auch mit BFS gelöst werden.
Herunterladen