2.5.1 Binäre Suchbäume 2.5.2 Optimale Suchbäume 2.5.3

Werbung
2.5 Bäume
2.5.1
2.5.2
2.5.3
2.5.4
2.5.5
1
Binäre Suchbäume
Optimale Suchbäume
Balancierte Bäume
Skip-Listen
Union-Find-Strukturen
Datenstrukturen und Algorithmen
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Union-Find-Strukturen
•  Datenstruktur zur Darstellung von
disjunkten Mengen.
•  Jede Menge A wird durch einen
Repräsentant x∈A identifiziert.
•  Operationen:
–  MakeSet
–  Union
–  Find
2
Datenstrukturen und Algorithmen
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Union-Find-Strukturen
•  MakeSet(x)
–  Erzeugt eine neue Menge Sx deren
einziges Element x ist.
–  Der Repräsentant von MakeSet(x) ist x.
–  Disjunktheit →
•  x darf nicht bereits in einer anderen Menge
enthalten sein
3
Datenstrukturen und Algorithmen
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Union-Find-Strukturen
•  z = Union(x,y)
–  Erzeugt die Vereinigung Sx ∪ Sy der
Mengen Sx und Sy (x und y müssen keine
Repräsentanten sein!)
–  z ist der Repräsentant der Vereinigung
–  Disjunktheit →
•  Sx und Sy müssen disjunkt sein
•  Sx und Sy werden zerstört
4
Datenstrukturen und Algorithmen
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Union-Find-Strukturen
•  z = Find(x)
–  Liefert den Repräsentant der Menge, die x
enthält
5
Datenstrukturen und Algorithmen
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Union-Find-Strukturen
•  Idee
–  Jede Menge A wird durch einen Baum
dargestellt.
–  Die Knoten des Baums enthalten die
Elemente von A.
–  Die Wurzel des Baums enthält den
Repräsentant von A.
–  Implementierung: Jeder Knoten hält einen
Zeiger auf seinen Vater.
6
Datenstrukturen und Algorithmen
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Union-Find-Strukturen
4
5
6
1
2
8
9
3
7
Datenstrukturen und Algorithmen
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
7
Union-Find-Strukturen
•  MakeSet(x)
p[x] ← x
?
8
Datenstrukturen und Algorithmen
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Union-Find-Strukturen
•  Find(x)
if x = p[x] then
return x
else
return Find( p[x] )
z
y
z = Find(x)
x
9
Datenstrukturen und Algorithmen
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Union-Find-Strukturen
•  Union(x,y)
q ← Find(x)
r ← Find(y)
p[q] ← r
return q
r
q
x
10
Datenstrukturen und Algorithmen
y
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Union-Find-Strukturen
•  Union(x,y)
q ← Find(x)
r ← Find(y)
p[q] ← r
return r
r
q
x
11
Datenstrukturen und Algorithmen
y
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Union-Find-Strukturen
•  Laufzeitverbesserungen
1.  Höhenbalancierung
2.  Pfadkompression
12
Datenstrukturen und Algorithmen
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Höhenbalancierung
•  Speichere in jedem Element x die Höhe
h[x] des darunterhängenden Baumes
•  Hänge bei Vereinigung stets die
niedrigeren Bäume an die höheren und
aktualisiere ggfs die Höhe der Wurzel.
13
Datenstrukturen und Algorithmen
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Höhenbalancierung
•  MakeSet(x)
p[x] ← x
h[x] ← 0
?
0
14
Datenstrukturen und Algorithmen
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Höhenbalancierung
•  Union(x,y)
q ← Find(x)
r ← Find(y)
if h[q] > h[r] then
p[r] ← q
return q
else
p[q] ← r
if h[q] = h[r] then
h[r] ← h[r] + 1
return r
15
Datenstrukturen und Algorithmen
2
1
0
1
0
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
0
1
Höhenbalancierung
•  Union(x,y)
q ← Find(x)
r ← Find(y)
if h[q] > h[r] then
p[r] ← q
return q
else
p[q] ← r
if h[q] = h[r] then
h[r] ← h[r] + 1
return r
16
Datenstrukturen und Algorithmen
2
1
0
1
0
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
0
1
Höhenbalancierung
•  Union(x,y)
q ← Find(x)
r ← Find(y)
if h[q] > h[r] then
p[r] ← q
return q
else
p[q] ← r
if h[q] = h[r] then
h[r] ← h[r] + 1
return r
17
Datenstrukturen und Algorithmen
1
0
1
0
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
0
Höhenbalancierung
•  Union(x,y)
q ← Find(x)
r ← Find(y)
if h[q] > h[r] then
p[r] ← q
return q
else
p[q] ← r
if h[q] = h[r] then
h[r] ← h[r] + 1
return r
18
Datenstrukturen und Algorithmen
2
0
1
0
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
0
Pfadkompression
•  Hänge nach jeder Find(x) Operation die
Elemente auf dem Pfad zu x an die
Wurzel.
19
Datenstrukturen und Algorithmen
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Pfadkompression
•  Find(x)
if x ≠ p[x] then
p[x] ← Find(p[x])
return p[x]
z
Find(x)
z
y
x
20
Datenstrukturen und Algorithmen
x
y
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Union-Find-Strukturen
•  Aufwand (ohne Beweis):
Sei n die Zahl der MakeSet()
Operationen und m die Zahl aller
MakeSet(), Union() und Find()
Operationen. Dann lässt sich der
Aufwand bei Verwendung von Höhenbalancierung und Pfadkompression
durch
O(m×a(n))
abschätzen, wobei a(n) ≤ 5 in allen
praktischen Fällen.
21
Datenstrukturen und Algorithmen
Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Herunterladen