Minimal spannende Bäume

Werbung
Minimal spannende Bäume
Ronny Harbich
24. Mai 2006 (geändert 19. August 2006)
Vorwort
Ich danke Patrick Bahr und meinem Bruder Steffen Harbich für die Unterstützung bei dieser
Arbeit. Sie haben sowohl zu inhaltlichen, als auch zu rechtschreiblichen und grammatikalischen
Verbesserungen beigetragen. Ebenfalls bedanke ich mich hiermit bei Anke Szofer für das schnelle
Korrekturlesen.
Für etwaige Kritik an [email protected] wäre ich dem Leser sehr dankbar.
Inhaltsverzeichnis
1 Ungerichtete Graphen
1.1 Definition . . . . . . . . .
1.2 Wege . . . . . . . . . . . .
1.3 Untergraphen . . . . . . .
1.4 Kantengewichtete Graphen
.
.
.
.
3
3
4
5
5
2 Bäume
2.1 Definition und Eigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Minimal spannende Bäume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Algorithmen zur Bestimmung minimal spannender Bäume . . . . . . . .
6
6
7
8
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1 UNGERICHTETE GRAPHEN
1
1.1
3
Ungerichtete Graphen
Definition
Zu Beginn führen wir den wichtigen Begriff des ungerichteten Graphen ein.
Definition 1.1. Ein ungerichteter Graph G ist eine algebraische Struktur G = (V, E), wobei
V eine endliche nicht leere Menge und E mit E ⊆ V × V eine symmetrische Relation auf V
ist (∀x, y ∈ V : xEy ⇒ yEx). Wir bezeichnen V als Menge von Knoten (vertices) und E als
Menge von Kanten (edges).
Wir meinen im Folgenden stets einen ungerichteten Graphen, wenn wir von einem Graphen
sprechen. Außerdem werden wir die Elemente aus V als Knoten und die Mengen der Form
{(x, y) , (y, x)} beziehungsweise {(z, z)} mit (x, y) , (y, x) , (z, z) ∈ E als Kanten bezeichnen.
Weiterhin nennen wir Kanten der Form (x, x) ∈ E Schlingen. Sollte ein Graph keine Schlingen
haben, also die Menge der Kanten E irreflexiv (∀x ∈ V : ¬xEx) sein, so heißt dieser schlicht.
Beispiel 1.1. Die Abbildung 1.1 veranschaulicht den Graphen
G1 = (V1 , E1 )
= ({v1 , v2 , v3 , v4 , v5 } ,
{(v1 , v2 ) , (v2 , v1 ) , (v1 , v3 ) , (v3 , v1 ) , (v2 , v3 ) , (v3 , v2 ) , (v3 , v4 ) , (v4 , v3 ) , (v4 , v4 )}) .
Abbildung 1.1: Der Graph G1 .
Wir bemerken, dass es sich bei der Kante e5 um eine Schlinge handelt. Natürlich ist G1 somit
kein schlichter Graph. Außerdem erkennen wir mit dem Knoten v5 , dass Knoten existieren
können, die nicht in einer Kante präsent sind.
♥
Als Nächstes fragen wir uns, wie viele Kanten es in einem Graphen geben kann und halten die
Antwort im folgendem Lemma fest.
Lemma 1.1. Die Menge der Kanten E eines Graphen G = (V, E) ist nur endlich.
Beweis: Sei G = (V, E) ein Graph. Dann ist die Menge V nach Definition 1.1 endlich. Somit ist
auch V × V mit |V × V | = |V |2 endlich. Da nach Definition E ⊆ V × V ist, folgt |E| ≤ |V × V |,
was uns die Endlichkeit von E zeigt.
1 UNGERICHTETE GRAPHEN
1.2
4
Wege
Eine der wichtigsten Fragen in einem Graphen ist eine nach einem Weg zwischen zwei Knoten.
Was genau wir unter einem Weg zu verstehen haben und wie wir entscheiden, ob es einen Weg
zwischen zwei Knoten gibt, zeigen wir im Nachstehenden.
Definition 1.2. Ein Weg w ∈ V n in einem Graphen G = (V, E) zwischen zwei Knoten x, y ∈ V
ist ein n-Tupel w = (x1 , x2 , . . . , xn ) mit x1 = x, xn = y und n ≥ 2, n ∈ N genau dann, wenn
(xi , xi+1 ) ∈ E mit 1 ≤ i ≤ n − 1, i ∈ N gilt1 . Wir nennen x Anfangs- und y Endknoten des
Weges w.
Um nun zu entscheiden, ob w tatsächlich ein Weg in einem Graphen G ist, definieren wir
induktiv die Menge W (G) aller Wege von G wie folgt.
Definition 1.3. Sei G = (V, E) ein Graph.
1. Jede Kante aus E ist ein Weg: ∀ (x, y) ∈ E : (x, y) ∈ W (G)
2. Seien (x, . . . , y) und (u, . . . , v) bereits Wege, also (x, . . . , y) , (u, . . . , v) ∈ W (G), dann
2.1 ist (x, . . . , y, . . . v), wenn y = u gilt, auch ein Weg ((x, . . . , y, . . . v) ∈ W (G)).
2.2 ist (x, . . . , y, u, . . . v), falls (y, u) ∈ E, ein Weg ((x, . . . , y, u, . . . v) ∈ W (G)).
3. Mehr Wege gibt es nicht.
Wir bezeichnen einen Weg (x1 , x2 , . . . , xn ) ∈ W (G) als Kreis, wenn Anfangs- und Endknoten
mit x1 = xn gleich sind und xi 6= xj mit i 6= j und i, j ∈ {k |1 ≤ k ≤ n − 1, k ∈ N } gilt. Einen
Graphen G, der keine Kreise enthält, nennen wir kreisfrei
(∀x ∈ V : ¬∃ (x1 , x2 , . . . , xn ) ∈ W (G) :
x1 = xn = x ∧ xi 6= xj ∧ i 6= j ∧ i, j ∈ {k |1 ≤ k ≤ n − 1, k ∈ N }) .
Lemma 1.2. Wenn ein Graph kreisfrei ist, dann ist er auch schlicht.
Beweis: Lemma 1.2 folgt direkt aus der Definition von Kreisfreiheit und Schlichtheit eines
Graphen.
Darüber hinaus heißt ein Graph G = (V, E) zusammenhängend, wenn zwischen je zwei
unterschiedlichen Knoten x und y aus V ein Weg (x, . . . , y) aus W (G) existiert, also
∀x, y ∈ V : x 6= y ⇒ ∃ (x, . . . , y) ∈ W (G)
gilt.
Beispiel 1.2. Die Abbildung 1.2 zeigt den Graphen G1 aus Beispiel 1.1. In dieser Abbildung
ist der Weg (v1 , v2 , v3 ) ∈ W (G1 ) zwischen den Knoten v1 und v3 rot markiert worden. Überdies
erkennen wir einen in grün dargestellten Kreis (v4 , v4 ) ∈ W (G1 ).
1
Mit N meinen wir stets die natürlichen Zahlen ohne 0.
1 UNGERICHTETE GRAPHEN
G2
5
v2
v3
v1
v4
v5
Abbildung 1.2: Graph aus Beispiel 1.1 mit rotem Weg und grünem Kreis.
An diesem Beispiel stellen wir auch fest, dass es nicht nur einen Weg zwischen zwei Knoten
geben muss. So existiert etwa zwischen v1 und v3 neben dem bereits genannten Weg noch ein
weiterer Weg (v1 , v3 ) ∈ W (G1 ). Zudem erkennen wir noch einen Kreis (v1 , v2 , v3 , v1 ) ∈ W (G1 )
im Graphen G1 . Schließlich bemerken wir, dass G1 = (V1 , E1 ) im Gegensatz zu (V1 \ {v5 } , E1 )
kein zusammenhängender Graph ist.
♥
1.3
Untergraphen
Wie man aus Beispiel 1.2 vielleicht schon bemerkt haben könnte, gibt es zu einem beliebigen
Graphen Graphen, die gewissermaßen nur durch einige Teile dieser Graphen aufgebaut sind.
Was genau wir unter solchen Untergraphen zu verstehen haben, zeigt die nachfolgende Definition.
0
0
0
Definition 1.4. Wir bezeichnen einen Graphen G = V , E als Untergraphen des Graphen
0
0
G = (V, E), wenn V ⊆ V und E ⊆ E gelten.
0
0
0
0
Sollte für einen Untergraphen G = V , E des Graphen G = (V, E) die Aussage V = V
0
gelten, so heißt G spannend. In diesem Sinne ist G1 = (V1 \ {v5 } , E1 ) aus Beispiel 1.2 ein
Untergraph von G1 = (V1 , E1 ) aber kein spannender.
Satz 1.1. Es gibt nur endlich viele Untergraphen in einem Graphen.
0
0
0
Beweis: Sei G = (V, E) ein Graph und G = V , E ein Untergraph von G. Dann gilt nach
0
0
0
0
Definition
somit auch V ∈ 2V und E ∈ 2E . Offensichtlich sind 2V
V 1.4|V V| ⊆ V Eund E E⊆ E und
mit 2 = 2 und 2 mit 2 = 2|E| endliche Mengen, da auch V und E nach Definition 1.1
und Lemma 1.1 endliche Mengen sind. Hieraus
schlussfolgern wir sofort, dass es nur endliche
0
0
0
viele verschiedene Untergraphen G = V , E geben kann.2
1.4
Kantengewichtete Graphen
Von entscheidender Bedeutung wird für uns die nächste Definition sein, die es uns erlauben
wird, die Kanten eines Graphen zu bewerten.
2
Die Menge 2M ist die Potenzmenge (Menge aller Teilmengen) der Menge M .
2 BÄUME
6
Definition 1.5. Ein kantengewichteter Graph G = (V, E, w) ist ein Graph (V, E) mit einer
Abbildung w : E → R+ , wobei w ((x, y)) = w ((y, x)). Wir nennen die Funktion w Gewicht
(weight).3
Natürlich gelten für einen kantengewichteten Graphen die schon für Graphen bekannten Eigenschaften. Wir bezeichnen mit
wΣ (G) =
X
(x,y)∈E,x6=y
X
w ((x, y))
+
w ((x, x))
2
(x,x)∈E
das Gewicht eines kantengewichteten Graphen G. Auch lässt sich für einen kantengewichteten
Graphen ein Untergraph definieren, wobei die Gewichtung der Kanten nicht verloren gehen soll.
0
0
0
0
Definition 1.6. Wir nennen einen kantengewichteten Graphen G = V , E , w kantenge0
0
wichteten Untergraphen des kantengewichteten Graphen G = (V, E, w), wenn V , E ein Un0
0
tergraph von (V, E) ist und ∀e ∈ E : w (e) = w (e) gilt.
Analog zum Untergraphen bezeichnen wir einen kantengewichteten Untergraphen als spannend, falls die beiden Mengen der Knoten gleich sind.
Beispiel 1.3. In Abbildung 1.3 ist ein kantengewichteter Graph
G3 = ({v1 , v2 , v3 , v4 } , {(v1 , v3 ) , (v3 , v1 ) , (v1 , v4 ) , (v4 , v1 ) , (v2 , v4 ) , (v4 , v2 )} , w) ,
w (v1 , v3 ) = w (v3 , v1 ) = 2, w (v1 , v4 ) = w (v4 , v1 ) = 5, 1, w (v2 , v4 ) = w (v4 , v2 ) = 3
und ein Untergraph G4 von G3 dargestellt.
G3
G4
v1
v2
2
5,1
v1
3
v3
2
v4
v3
Abbildung 1.3: Ein kantengewichteter Graph G3 und ein Untergraph G4 von G3 .
Das Gewicht des kantengewichteten Graphen G3 beträgt wΣ (G3 ) = 10, 1. Offensichtlich ist G4
kein spannender Untergraph von G3 .
♥
2
Bäume
2.1
Definition und Eigenschaften
An dieser Stelle wollen wir besondere Graphen betrachten, die eine baumartige Struktur aufweisen.
3
Mit R+ meinen wir die positiven reellen Zahlen.
2 BÄUME
7
Definition 2.1. Ein Baum (tree) T ist ein zusammenhängender und kreisfreier Graph (V, E).
Wir bemerken, dass ein Baum aufgrund von Lemma 1.2 auch immer schlicht sein muss.
Definition 2.2. Ein spannender Baum S ist ein Baum, der ein spannender Untergraph eines
Graphen ist.
Beispiel 2.1. Abbildung 2.1 visualisiert einen Graphen T1 .
T1
Abbildung 2.1: Ein Baum T1 .
Offenbar ist T1 ein Baum, da er zusammenhängend und kreisfrei ist.
♥
Der nächste Satz wird für uns von zentraler Bedeutung sein, wenn wir später aus einem Graphen
besondere Bäume heraussuchen werden.
Satz 2.1. Es existiert dann und nur dann ein spannender Baum in einem Graphen G, wenn
G zusammenhängend ist.
0
0
Beweis: Wenn S = V , E ein spannender Baum zu einem Graphen G = (V, E) ist, dann
ist S nach Definition 2.2 ein spannender Untergraph von G. Somit enthält S alle Knoten von
0
0
G , also V = V und es gilt E ⊆ E. Dies bedeutet, alle Kanten von S sind auch Kanten von
G. Aus diesen Tatsachen und dass S zusammenhängend ist, folgern wir direkt, dass auch G
zusammenhängend ist.
Sei nun G = (V, E) ein zusammenhängender Graph. Wenn G ein Baum ist, dann ist G auch
ein spannender Baum von G. Wenn G kein Baum sein sollte, dann gibt es mindestens einen
Kreis k = (x1 , . . . , xn ) ∈ W (G). Entfernen wir nun genau eine Kante {(x, y) , (y, x)} mit
0
(x1 , . . . , x, y, . . . xn ) = k aus G, so erhalten wir einen Untergraphen G = (V, E \ {(x, y) , (y, x)})
von G, der immer noch zusammenhängend ist aber den Kreis k nicht mehr enthält. Entweder
0
ist G ein Baum
und damit ein spannender Baum von G , oder es existiert mindestens ein Kreis
0
0
0
k ∈ W G . Nun entfernen wir analog zu G genau eine Kante aus G und erhalten einen neuen
0
zusammenhängenden Graphen ohne den Kreis k . Wir verfahren weiter so,
wie oben dargestellt,
0
bis wir einen zusammenhängenden kreisfreien Untergraphen S = V, E von G erlangen. S ist
dann ein gesuchter spannender Baum von G. Dass die Konstruktion von S in endlich vielen
Schritten gelingt, sehen wir durch Satz 1.1 ein.
2.2
Minimal spannende Bäume
Im Folgenden befassen wir uns mit minimal spannenden Bäumen in kantengewichteten Graphen. Was genau wir unter solchen Bäumen zu verstehen haben, zeigt die nachstehenden Definition.
2 BÄUME
8
Definition 2.3. Ein minimal spannender Baum (Minimum Spanning Tree – MST) M eines zu-
0
sammenhängenden kantengewichteten Graphen G = (V, E, w) ist ein spannender Baum V, E
vom Graphen (V, E), falls kein anderer spannender Baum V, E von (V, E) derart existiert,
0
0 0
0
dass wΣ V, E, w < wΣ V, E , w
mit ∀e ∈ E : w (e) = w (e) und ∀e ∈ E : w (e) = w (e)
gilt.
Beispiel 2.2. Abbildung 2.2 zeigt einen Graphen G5 und mit M1 einen minimal spannenden
Baum in G5 .
G5 , M 1
1
v1
v2
4
2
5
9
v3
5
1
v4
Abbildung 2.2: Ein Graph G5 mit einem zugehörigen minimal spannenden Baum M1 .
Das Gewicht des Graphen G5 beträgt wΣ (G5 ) = 27 und jenes von M1 nur wΣ (M1 ) = 7. Wie
wir an diesem Beispiel sehen, kann man mit den Kanten in M1 von jedem beliebigen Knoten
aus jeden anderen erreichen und dabei ist das Gewicht von M1 auch noch minimal.
♥
Der nachfolgende Satz zeigt uns, wann genau wir einen minimal spannenden Baum in einem
Graphen finden können.
Satz 2.2. Es existiert dann und nur dann ein minimal spannender Baum in einem kantengewichteten Graphen G, wenn G zusammenhängend ist.
Beweis: Sei M ein minimal spannender Baum zu einem kantengewichteten Graphen G =
(V, E, w). Dann ist M nach Definition 2.3 ein spannender Baum von (V, E) und somit ist laut
Satz 2.1 (V, E) ein zusammenhängender Graph. Schließlich folgt aus der letzten Tatsache, dass
G zusammenhängend ist.
Sei G = (V, E, w) andersherum ein kantengewichteter zusammenhängender Graph. Dann gibt
0
0
es nach Satz 2.1 einen spannenden Baum S = V, E in dem zusammenhängenden Graphen
0
(V, E).
weiteren spannenden Baum S =
Entweder ist S bereits minimal
oder es gibt einen
0
0 V, E von (V, E), sodass wΣ V, E, w < wΣ V, E , w
mit ∀e ∈ E : w (e) = w (e) und
0
0
∀e ∈ E : w (e) = w (e) gilt. Nun gibt es nach Satz 1.1 nur endliche viele Untergraphen, mithin
auch nur endlich viele spannende Bäume in (V, E). Folglich muss mindestens einer dieser nur
endlich vielen spannenden Bäume ein minimaler sein.
2.2.1
Algorithmen zur Bestimmung minimal spannender Bäume
Wir fragen uns nun, wie man einen minimal spannenden Baum M in einem zusammenhängenden kantengewichteten Graphen G = (V, E, w) finden kann.
Um diese Bäume zu finden, geben wir im Folgenden zwei Algorithmen an.
2 BÄUME
9
Definition 2.4. Algorithmus von Kruskal
Eingabe: zusammenhängender kantengewichteter Graph G = (V, E, w)
0
Ausgabe: minimal spannender Baum M = V, E von G
B1:
B2:
B3:
B4:
B5:
B6:
0
E := ∅; E := E;
solange E 6= ∅
{
0
0
K := {(x, y) , (y, x)} mit (x, y) ∈ e ∈ E ¬∃e ∈ E : w e < w (e) ;
E := E \ K;
0
wenn V, E ∪ K kreisfrei, dann
{
0
0
E := E ∪ K;
}
}
Insbesondere bemerken wir, dass B3 stets ausführbar ist, da
o
0
n
0
e ∈ E ¬∃e ∈ E : w e < w (e)
offensichtlich wegen B2 niemals leer sein kann.
Wir geben nun eine bildliche Interpretation des Algorithmus. Zu Beginn sortieren wir alle
Kanten des Graphen G aufsteigend entsprechend ihres Gewichtes und schreiben sie in eine Liste.
Dann entfernen wir die kleinste Kante aus der Liste und nehmen sie in den noch kantenlosen
Graphen M auf. Wir entfernen nun solange die jeweils kleinste Kante aus der Liste und fügen
diese in M ein, wenn M dadurch noch immer kreisfrei bleibt, bis keine Kante mehr in der Liste
ist. M ist dann ein minimal spannender Baum von G.
0
Beispiel 2.3. Seien G5 = (V, E, w) und M1 = V, E der Graph beziehungsweise der minimal
spannende Baum in Abbildung 2.2 aus Beispiel 2.2. Der Algorithmus von Kruskal berechnet
dann, durch Abbildung 2.3 veranschaulicht, M1 wie folgt.
1.
1
v1
v3
3.
v2
2.
v4
1
v1
v2
v3
4.
v2
1
1
v1
4
2
v3
1
v1
v4
v2
2
v4
v3
v4
Abbildung 2.3: Schrittweiser Aufbau des minimal spannenden Baums M1 von G5 .
2 BÄUME
10
0
Zu Beginn ist wegen B1 E = ∅ und E = E. Anschließend durchlaufen wir schrittweise die
Schleife B2:
1. K = {(v1 , v2 ) , (v2 , v1 )},
E = E \ {(v1 , v2 ) , (v2 , v1 )},
0
E = {(v1 , v2 ) , (v2 , v1 )}
2. K = {(v4 , v4 )},
E = (E \ {(v1 , v2 ) , (v2 , v1 )}) \ {(v4 , v4 )},
0
E = {(v1 , v2 ) , (v2 , v1 )} (die in Abbildung 2.3 rot dargestellte Kante {(v4 , v4 )} wird nicht
0
in E aufgenommen, da sonst ein Kreisentstehen würde)
3. K = {(v1 , v3 ) , (v3 , v1 )},
E = ((E \ {(v1 , v2 ) , (v2 , v1 )}) \ {(v4 , v4 )}) \ {(v1 , v3 ) , (v3 , v1 )},
0
E = {(v1 , v2 ) , (v2 , v1 ) , (v1 , v3 ) , (v3 , v1 )}
4. K = {(v1 , v4 ) , (v4 , v1 )},
E = (((E \ {(v1 , v2 ) , (v2 , v1 )}) \ {(v4 , v4 )}) \ {(v1 , v3 ) , (v3 , v1 )}) \ {(v1 , v4 ) , (v4 , v1 )},
0
E = {(v1 , v2 ) , (v2 , v1 ) , (v1 , v3 ) , (v3 , v1 ) , (v1 , v4 ) , (v4 , v1 )}
0
5. Bei diesem und den folgenden Schritten bleibt E unverändert, da sonst jede neu eingefügte Kante einen Kreis in M1 erzeugen würde. Schließlich ist E = ∅ im 7. Durchlauf der
Schleife und der Algorithmus wird beendet.
Nachdem der Algorithmus terminiert ist, erhalten wir den bereits in Beispiel 2.2 dargestellten
minimal spannenden Baum M1 .
♥
Satz 2.3. Der Algorithmus von Kruskal ist korrekt.
0
Beweis: Sei G = (V, E, w) ein zusammenhängender kantengewichteter Graph und M = V, E
die Ausgabe des Algorithmus von Kruskal. Wir beweisen die Korrektheit des Algorithmus,
indem wir zeigen, dass er terminiert und dass M ein minimal spannender Baum von G ist. Wir
müssen also für M zeigen, dass M Untergraph von (V, E), spannend, kreisfrei, zusammenhängend und minimal ist.
Weshalb der Algorithmus terminieren muss, sehen wir durch B2, B3 und B4 folgendermaßen
ein: Durch B3 suchen wir in jedem Schleifendurchlauf aus E mindestens ein Element heraus und
entfernen jenes anschließend durch B4 aus E. Weiterhin wird E durch keine andere Operation
verändert. Somit enthält E nach jedem Schleifendurchlauf immer weniger Elemente. Aufgrund
von B2 terminiert der Algorithmus, wenn E = ∅. Da E := E am Anfang des Algorithmus durch
B1 festgelegt wurde und E nach Definition 1.1 nur endlich ist, wird die Schleife B2 nur endlich
oft durchlaufen. Folglich
terminiert der Algorithmus.
0
Dass M = V, E ein Untergraph von (V, E) ist, sieht
man durch den aus B6 folgenden Zusam0
0
menhang E ⊆ E ein. Offensichtlich ist M = V, E spannend, da M nach Definition dieselbe
Menge von Knoten wie (V, E) enthält. Außerdem ist die Kreisfreiheit von M trivialerweise
durch B5 gegeben.
Als nächstes zeigen wir indirekt, dass M zusammenhängend ist. Sei also M nicht zusammenhängend. Dann existieren in M zwei Knoten x, y ∈ V , die nicht durch einen Weg (x1 , x2 , . . . , xn ) ∈
W (M ) mit x1 = x und xn = y verbunden sind. Dagegen aber sind x und y im zusammenhängenden Graphen (V, E) durch einen Weg (y1 , y2 , . . . , yn ) ∈ W ((V, E)) mit y1 = x
und yn = y verbunden. Folglich gibt es eine Kante (yi , yi+1 ) ∈ E mit 1 ≤ i ≤ n − 1, i ∈
2 BÄUME
11
0
0
N im Weg (y1 , . . . , yi , yi+1 , . . . , yn ), sodass (yi , yi+1 ) ∈
/ E und damit auch (yi+1 , yi ) ∈
/ E
gilt. Außerdem beachten wir, dass der Algorithmus durch B2, B3 und B4 alle Kanten in
E, und somit ebenfalls (yi , yi+1
) beziehungsweise (yi+1 , yi ), betrachtet. Wir zeigen nun, dass
0
V, E ∪ {(yi , yi+1) , (yi+1 , yi )} bei B5 kreisfrei sein muss. Wenn dies nicht der Fall wäre, dann
0
hätte es in V, E schon einen Weg von x nach y geben müssen, was ja nach obiger Annahme
0
0
nicht der Fall ist. Schließlich folgt aus dieser Kreisfreiheit, dass (yi , yi+1 ) ∈ E und (yi+1 , yi ) ∈ E
0
/ E und
durch B6 gelten müssten. Dies kann aber nach den Voraussetzungen (yi , yi+1 ) ∈
0
(yi+1 , yi ) ∈
/ E unmöglich sein. Hieraus folgern wir, dass unsere Annahme falsch und M somit zusammenhängend ist.
0
Schlussendlich müssen wir noch belegen, dass M = V, E minimal ist. Dies wollen wir indirekt
tun. Nehmen wir also an M sei nicht minimal.
Dann existiert ein minimal spannender Baum
M * = V, E * von G, sodass wΣ M * < wΣ (M ). Ferner seien (e1 , . . . , en ) mit n ∈ N und
0
n ≤ |E| die durch den Algorithmus in B6 der Reihe nach in E eingefügten Kanten der Form
{(x, y) , (y, x)}. Aufgrund von M * 6= M gibt es eine erste Kante ei aus (e1 , . . . , en ) mit
i ∈ N und
*
1 ≤ i ≤ n, für die ei * E * gilt. Wir erzeugen nun einen Untergraphen
V,
E
∪
e
i von (V, E)
*
*
aus M , der dann sicher einen Kreis k ∈ W V, E ∪ ei beinhaltet. k enthält offensichtlich
ei und eine weitere Kante e mit e ⊆ E * und e * E. Außerdem gilt nach dem Algorithmus
w (ei ) ≤ w (e), da sonst e in B3 zuerst gewählt worden wäre. Der Untergraph V, E * ∪ ei \ e
von (V, E) ist dann aufgrund obiger Tatsachenselbstverständlich zusammenhängend
und ein
*
*
spannender Baum von (V, E). Und
somit
erhalten
wir
w
V,
E
∪
e
\
e
≤
w
M
.
Σ
i
Σ
*
*
Darüber hinaus hat V, E ∪ ei \ e genau eine Kante mehr gemeinsam mit M als M mit
M . So wie wir V, E * ∪ ei \ e = U1 aus M * konstruiert
haben, konstruieren wir analog
einen weiteren Untergraphen U2 aus V, E * ∪ ei \ e und Untergraphen Ui+1 aus Ui mit 2 ≤
i ≤ m − 1 und i, m ∈ N, wobei Um = M ist. Für alle Uj mit 1 ≤ j ≤
m und j ∈ N gilt
dann wΣ (Uj ) ≤ wΣ M * . Mithin muss auch wΣ (Um = M ) ≤ wΣ M * sein. Dies ist aber
ein Widerspruch zur obigen Annahme wΣ M * < wΣ (M ). Hieraus folgern wir, dass M doch
minimal ist.
Der Algorithmus von Kruskal lässt sich so implementieren, dass sein Aufwand O (|E| · log |V |)
ist. Dies sieht man folgendermaßen ein: Der Algorithmus wird mit einem Heap realisiert, der
in O (|E|) erzeugt werden kann und in welchem die Kante mit dem geringsten Gewicht in
O (log |E|) entfernt wird. Weiterhin lässt sich die Überprüfung auf Kreisfreiheit in O (log |V |)
implementieren. Da wir in der Schleife alle Kanten aus E durchlaufen, ergibt sich dann
O (|E| · (log |E| + log |V |)) .
Mit dem Aufbauen des Heaps in O (|E|), der Schleife und |E| ≤ |V |2 wegen E ⊆ V ×V erhalten
wir für den Gesamtaufwand
O (|E| + |E| · (log |E| + log |V |)) = O |E| · log |V |2 + log |V |
= O (|E| · (2 · log |V | + log |V |))
= O (|E| · log |V |) .
Als Nächstes betrachten wir einen zweiten Algorithmus zur Bestimmung eines minimal spannenden Baums.
Definition 2.5. Algorithmus von Prim:
Eingabe: zusammenhängender kantengewichteter Graph G = (V, E, w)
0
Ausgabe: minimal spannender Baum M = V, E von G
2 BÄUME
B1:
B2:
12
0
0
V := {v} mit v ∈ V ; E := ∅;
0
solange V 6= V
{
n
0
0
(x, y) ∈ (p, q) ∈ E p ∈ V ∧ q ∈ V \ V ∧
0 0
0 0 o
0
0
0
0
¬∃ p , q ∈ E : p ∈ V ∧ q ∈ V \ V ∧ w p , q
< w ((p, q))
0
0
E := E ∪ {(x, y) , (y, x)};
0
0
V := V ∪ {y};
B3:
B4:
}
Auch zum Algorithmus von Prim geben wir eine Interpretation an. Sei G = (V, E, w) und
0
V = {v} eine Menge von Knoten, die zu Beginn einen beliebigen Knoten v ∈ V beinhaltet.
0
Darüber hinaus sei E = ∅ die anfangs leere Menge von Kanten des zu findenden minimal
spannenden Baums M von G. Wir wählen nun von Kanten der Form {(x, y) , (y, x)} von G,
0
0
wobei x ∈ V und y ∈ V \ V , eine solche mit minimalem Gewicht aus. Diese Kante fügen wir
0
0
0
dann in E ein und y in V . Anschließend wiederholen wir diese Schritte solange, bis V 6= V .
0
Beispiel 2.4. Wiederum seien G5 = (V, E) und M1 = V, E der Graph beziehungsweise
der minimal spannende Baum in Abbildung 2.2 aus Beispiel 2.2. Dieses mal berechnen wir M1
nicht mit dem Algorithmus von Kruskal wie in Beispiel 2.3, sondern mit dem Algorithmus
von Prim. Abbildung 2.4 veranschaulicht die einzelnen Schritte dieses Algorithmus für M1 .
0.
v1
v3
2.
1.
v2
1
1
v1
v2
4
v4
v3
3.
v2
4
v1
v4
1
v1
4
v2
2
v3
v4
v3
v4
Abbildung 2.4: Schrittweiser Aufbau des minimal spannenden Baums M1 von G5 .
0
0
Anfänglich sei wegen B1 V := {v4 } und E = ∅. Anschließend durchlaufen wir schrittweise die
Schleife B2:
0
1. E = {(v4 , v1 ) , (v1 , v4 )},
0
V = {v4 , v1 } (wie wir in Abbildung 2.4 sehen, müssen wir die Kante {(v4 , v4 )} verwerfen,
0
da v4 ∈ V aber v4 ∈
/ V \V )
0
2. E = {(v4 , v1 ) , (v1 , v4 ) , (v1 , v2 ) , (v2 , v1 )},
0
V = {v4 , v1 , v2 }
2 BÄUME
13
0
3. E = {(v4 , v1 ) , (v1 , v4 ) , (v1 , v2 ) , (v2 , v1 ) , (v1 , v3 ) , (v3 , v1 )},
0
V = {v4 , v1 , v2 , v3 } = V
0
4. Wegen V = V wird die Schleife jetzt verlassen und der Algorithmus beendet.
Nach der Terminierung des Algorithmus erhalten wir den schon in Beispiel 2.2 und Beispiel 2.3
gezeigten minimal spannenden Baum M1 .
♥
Satz 2.4. Der Algorithmus von Prim ist korrekt.
Beweis: Wir verweisen an dieser Stelle auf den in [CH94] durchgeführten Beweis.
Wir erwähnen hier nur, dass der Algorithmus von Prim mit Hilfe eines Fibonacci-Heaps in
O (|E| + |V | · log |V |) realisiert werden kann.
Die zwei Algorithmen finden nicht nur minimal spannende Bäume, sondern durch eine geschickte Umgewichtung der Kanten auch maximal spannende Bäume. Wollen wir etwa einen
0
0
maximal spannenden Baum von G = (V, E, w) erzeugen, so geben wir G = V, E, w mit
0
w (e) = s − w (e), s ∈ R+ und ∀e ∈ E : s > w (e) in Kruskals beziehungsweise Prims
0
Algorithmus ein. Wir erhalten dann als Ausgabe einen minimal spannenden Baum von G und
somit einen maximal spannenden von G. Die beiden vorgestellten Algorithmen sind, aufgrund
der sofortigen und lokalen Auswahl einer Kante mit möglichst kleinem Gewicht, den GreedyAlgorithmen zu zuordnen. Der Algorithmus von Kruskal und der von Prim werden heute im
Allgemeinen verwendet, um minimal oder maximal spannende Bäume zu finden. Dennoch existiert ein von Bernard Chazelle entwickelter Algorithmus, der minimal spannende Bäume
in einem Graphen G = (V, E) mit einem Aufwand von annähernd O (|E|) findet.
Zum Schluss erwähnen wir noch eine praktische Anwendung der genannten Algorithmen. Ein
Ingenieur hat die Aufgabe erhalten zwischen verschiedenen Ortschaften eines Landes die Verlegung von Netzwerkkabeln zum Ausbau des Internets zu planen. Dabei muss jeder Ort von jedem
anderen Ort aus erreichbar sein. Nun erstellt der Ingenieur zunächst einen Graphen in dem er
die Ortschaften als Knoten einträgt. Kanten fügt er zwischen jeweils zwei Knoten ein, wenn zwischen jeweils zwei Orten die Möglichkeit besteht ein Netzwerkkabel zu verlegen. Anschließend
überprüft er die realen Kosten eines jeden Netzwerkkabels und trägt diese als Gewicht der entsprechenden Kante im Graphen ein. Hat der Ingenieur den Graphen nun vollständig erstellt, so
kann er mit Hilfe von Kruskals beziehungsweise Prims Algorithmus einen minimal spannenden
Baum bestimmen. Dieser zeigt dann die Netzwerkkabel an, die Verlegt werden müssen damit
jeder Ort von jedem anderen aus erreichbar ist und die die Gesamtkosten des Netzes minimal
halten.
Literatur
[Aig93] Aigner, Martin: Diskrete Mathematik. Braunschweig [u.a.] : Vieweg, 1993. – ISBN
3–528–07268–7
[Bra94] Brandstädt, Andreas: Graphen und Algorithmen. Stuttgart : B. G. Teubner, 1994.
– ISBN 3–519–02131–5
[CH94] Clark, John ; Holton, Derek A.: Graphentheorie – Grundlagen und Anwendungen.
Heidelberg [u.a.] : Spektrum – Akademischer Verlag, 1994. – ISBN 3–86025–331–X
[Das05] Dassow, Jürgen: Logik für Informatiker. Wiesbaden : B. G. Teubner, 2005. – ISBN
3–519–00518–2
[Hol03] Hollatz, Horst: Mathematik – Vorlesung für Informatiker. Aachen : Shaker, 2003. –
ISBN 3–8322–1723–1
[Tur96] Turau, Volker: Algorithmische Graphentheorie. Bonn [u.a.] : Addison – Wesley, 1996.
– ISBN 3–89319–938–1
Herunterladen