7. Graphen mit Kantenkosten
7.5 Union by Rank
Wir beschreiben nun eine neue Union-Find-Datenstruktur.
Jede Menge der Partition wird durch einen Baum mit Wurzel dargestellt.
In dem Baum sind alle Kanten zur Wurzel hin gerichtet.
Implementieren lässt sich das einfach durch ein Array:
parent[v]
ist der Elternknoten von parent[v] := v
.
Das Label einer Menge ist der Name des Wurzelknotens. Für
RelabelMinority
aus dem vorherigen
Teilkapitel legt nahe, den kleineren Baum zum größeren zu verbinden.
Wir tun hier etwas Ähnliches: wir verbinden den weniger tiefen Baum
zum tieferen. Hier ist eine Demo:
Um das effizient zu implementieren, müssen wir etwas Buchführung treiben:
für jeden Knoten
Aus Gründen, die später noch klar werden werden, weisen wir jedem Knoten
einen Rang
class UnionByRank:
def __init__(self, n):
self.parent = [i for i in range(n)] # jedes Element ist Wurzel seines eigenen Baumes
self.rank = [2 for i in range(n)] # jedes Element hat Rang 2
def find(self,u):
if self.parent[u] == u:
return u
else:
root = self.find(self.parent[u])
return root
def union(self, u, v):
x = self.find(u)
y = self.find(v)
if (x == y):
return # u, v sind bereits in der gleichen Menge
elif self.rank[x] < self.rank[y]:
self.parent[x] = y
elif self.rank[x] > self.rank[y]:
self.parent[y] = x
else:
self.parent[x] = y
self.rank[y] += 1
def __str__(self):
return (str(self.parent))
# example < < > > & &
Übungsaufgabe 7.5.1 Zeigen Sie, dass für jedes Element und zu jedem Zeitpunkt
gilt.
Nun könnten Sie sich fragen: wenn
Laufzeitanalyse
Die Laufzeit von find(u)
ist
proportional zur Länge des Pfades von
Lemma 7.5.1 Wenn es Knoten
Höhe
Beweis.
Wir bezeichnen mit
Am Anfang gilt
Der Fall
und die Aussage des Lemmas gilt nach wie vor.
Die Kosten einer jeden find-Operation sind also höchstens
In der Datenstruktur
UnionByRank
mit
Kruskals Algorithmus benötigt somit
Im Hinblick auf eine weitere Verbesserung im nächsten Teilkapitel
zeigen wir eine weitere wichtige Eigenschaft der
UnionByRank
-Datenstruktur:
Lemma 7.5.3 Zu jedem Zeitpunkt
gilt: die Anzahl der Elemente mit Rang
Beweis.
Wir betrachten einen spezifischen Zeitpunkt. Seien
denn mehr als