Kapitel 4: Minimal spannende Bäume Gliederung der - fbi.h

Werbung
Kapitel 4: Minimal spannende Bäume
Gliederung der Vorlesung
1.
2.
3.
4.
5.
6.
7.
8.
4/2, Folie 1
Fallstudie Bipartite Graphen
Grundbegriffe
Elementare Graphalgorithmen und Anwendungen
Minimal spannende Bäume
Kürzeste Wege
Traveling Salesman Problem
Flüsse in Netzwerken und Anwendungen
Netzplantechnik
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Gliederung des Kapitels
a)
b)
c)
d)
4/2, Folie 2
Motivation
Begriffe und Lösungsansatz
Die Verfahren von Kruskal und Prim
Ein anderer Ansatz
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Die Verfahren von Kruskal und Prim
 Anmerkung
•
•
beide Verfahren basieren auf dem „generischen“ Lösungsansatz zum
Bestimmen eines minimal spannenden Baums
die Herangehensweise unterscheidet sich
•
•
4/2, Folie 3
bei „Kruskal“ werden sukzessive sichere Kanten aufgenommen,
die Zusammenhangskomponenten im Teilgraphen G‘ = (V,E‘)
„verbinden“
bei „Prim“ werden sukzessive zu einem Teilgraphen G‘ = (V‘,E‘),
der nur eine Zusammenhangskomponente enthält, sichere
Kanten hinzugefügt
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Die Verfahren von Kruskal und Prim
 Beispiel (/* Verfahren von Kruskal */)
1
1
3
3
2
4
2
5
1
3
4
4
6
3
2
5
4/2, Folie 4
3
3
2
1
-
... G‘ = (V,E‘) rot
... 5 Zusammenhangskomponenten
5
7
3
4
6
3
4
1
3
3
© 2011 Prof. Steffen Lange
3
3
1
HDa/FbI
4
... G‘ = (V,E‘) rot
... 4 Zusammenhangskomponenten
5
7
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Die Verfahren von Kruskal und Prim
 Beispiel (/* Verfahren von Prim */)
1
1
4
2
2
3
4
5
1
1
4
3
4
6
2
4
© 2011 Prof. Steffen Lange
-
... G‘ = (V‘,E‘) rot
... 1 Zusammenhangskomponente
5
7
4
4
6
2
4
1
3
4
5
4/2, Folie 5
4
2
2
4
3
1
HDa/FbI
4
... G‘ = (V‘,E‘) rot
... 1 Zusammenhangskomponente
5
7
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Die Verfahren von Kruskal und Prim
 Algorithmische Fragestellung
•
gegeben:
•
•
•
ein ungerichteter, zusammenhängender Graph G = (V,E)
eine Gewichtsfunktion w(.) für G
gesucht:
•
eine Kantenmenge E‘ ⊆ E, so dass G‘ = (V,E‘) ein
minimaler spannender Baum für G ist
... der Graph G habe genau n Knoten (/* der Einfachheit
halber sei V = { 1,...,n } */) und m Kanten
4/2, Folie 6
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal
 Algorithmische Idee
1)
2)
3)
sortiere die Kanten nach aufsteigendem Gewicht und speichere sie
in einer Liste L
setze E‘ = ∅
solange |E‘| < n -1 ist
•
bestimme in L die Kante e mit dem kleinsten Gewicht und
streiche e aus L
prüfe, ob e zwei Zusammenhangskomponenten im
Teilgraphen G‘ = (V,E‘) verbindet
•
•
4/2, Folie 7
falls ja, so setze E‘ = E‘ ∪ { e }
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal
 Beispiel
1
1
6
6
1
6
6
© 2011 Prof. Steffen Lange
-
HDa/FbI
4
6
3
5
2
5
4/2, Folie 8
4
2
5
3
2
5
1
5
2
3
-
5
5
4
6
7
1
3
4
4
1
4
5
7
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal
 Beispiel
1
1
6
6
1
6
6
© 2011 Prof. Steffen Lange
-
4
6
3
5
HDa/FbI
-
6
7
1
5
4
3
4
5
3
2
5
4/2, Folie 9
4
2
5
3
2
5
1
5
2
1
4
5
7
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal
 Beispiel
1
1
6
6
1
6
© 2011 Prof. Steffen Lange
-
6
3
5
HDa/FbI
4
5
7
1
5
3
2
5
4/2, Folie 10
4
2
6
5
3
2
5
1
5
2
4
5
3
-
6
1
7
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal
 Beispiel
1
1
6
6
1
6
6
© 2011 Prof. Steffen Lange
-
6
3
5
7
1
5
3
2
HDa/FbI
4
5
2
5
4/2, Folie 11
5
3
2
5
1
5
2
4
5
3
-
6
1
7
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal
 Beispiel
1
1
6
6
1
6
6
© 2011 Prof. Steffen Lange
-
6
3
5
7
1
5
3
2
HDa/FbI
4
5
2
5
4/2, Folie 12
5
3
2
5
1
5
2
4
5
3
-
6
1
7
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal
 Anmerkung (/* Korrektheit */)
•
offenbar genügt es zu zeigen, dass in jedem Schritt eine sichere
Kante aufgenommen wird
•
•
es sei E‘ ⊆ E die aktuell ausgewählte Kantenmenge
es seien V1,...,Vk die aktuell betrachteten Zusamenhangskomponenten von G‘ = (V,E‘) (/* es gilt V = V1 ∪ ... ∪ Vk */)
es sei e = { u,v } die Kante die aufgenommen wird, wobei o.B.d.A.
u ∈ V1 und v ∈ V2 gelte
•
•
•
4/2, Folie 13
es sei A = V1 und B = V \ V1
offenbar ist (A,B) ein Schnitt der E‘ respektiert und e eine Kante, die
den Schnitt kreuzt
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal
 Anmerkung (/* Korrektheit */)
•
es sei e‘ = { u‘,v‘ } irgendeine Kante mit w(e‘) < w(e)
•
•
offenbar gibt es eine Zusammenhangskomponente Vi mit u‘,v‘ ∈ Vi
offenbar muss für den gewählten Schnitt (A,B) entweder Vi ⊆ A oder
Vi ⊆ B gelten (/* da (A,B) die Kantenmenge E‘ respektiert und V1,...,
Vk die aktuell betrachteten Zusammenhangskomponenten von
G‘ = (V,E‘) sind */)
•
also kann e‘ nicht den Schnitt (A,B) kreuzen
... also ist e eine leichte Kante, die den Schnitt (A,B)
kreuzt (/* und damit eine sichere Kante */)
4/2, Folie 14
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal
 Anmerkung
•
statt in jedem Schritt
•
•
alle Zusammenhangskomponenten im Teilgraphen G‘ = (V,E‘)
zu bestimmen und
zu prüfen, ob die aktuell interessierende Kante e zwei
Zusammenhangskomponenten im Teilgraphen G‘ = (V,E‘)
verbindet
... kann man natürlich auch alternativ prüfen, ob der
Teilgraph (V,E‘ ∪ { e }) zyklenfrei ist
4/2, Folie 15
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal
 Realisierung (/* Version 1 */)
1)
2)
3)
bestimme eine Liste L, in der alle Kanten e von G bzgl. ihrer
Gewichte w(e) aufsteigend sortiert sind
setze E‘ = ∅
solange |E‘| < n - 1 ist
•
•
•
bestimme die Kante e mit dem minimalen Gewicht in L und
streiche e aus L
teste, ob G‘ = (V,E‘ ∪ { e }) ein zyklenfreier Graph ist
falls ja, setze E‘ = E‘ ∪ { e }
... Schritt1) benötigt die Zeit O(m*log(m))
... Schritt 3) wird höchstens m mal durchgeführt und benötigt (/* falls
hier eine Tiefensuche verwendet wird */) jeweils die Zeit O(n+n)
... also benötigt diese Version die Zeit O(m*log(m) + m*n)
4/2, Folie 16
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal
 Anmerkung
•
man kann die Laufzeit des Verfahrens von Kruskal verbessern, in
dem man den Test auf Zyklenfreiheit anders realisiert
... das wollen wir uns etwas genauer ansehen
•
um herauszubekommen, ob der Graph G = (V,E) immer noch zyklenfrei
ist, wenn eine Kante e = {u,v} aufgenommen wird (/* d.h. der Graph
G‘ = (V,E ∪ { e }) ist auch zyklenfrei */) genügt es
•
•
•
4/2, Folie 17
die Zusammenhangskomponente Vi in G = (V,E) zu
bestimmen, zu der u gehört
die Zusammenhangskomponente Vj in G = (V,E) zu
bestimmen, zu der v gehört
zu testen, ob Vi = Vj gilt
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal - Einschub: Union-Find-Strukturen
 Anforderungen an die Datenstruktur
4/2, Folie 18
•
wir interessieren uns dafür, mögliche Zerlegungen einer gegebenen
Menge in Teilmengen zu „verwalten“
•
zu Beginn enthält jede Teilmenge ein Element
•
während der Benutzung der Datenstruktur kann sich die Zerlegung
ändern, in dem zwei Teilmengen zu einer Teilmenge zusammengefasst
werden (/* Union-Operation */)
•
um Teilmengen gezielt vereinigen zu können, sollte man herausbekommen können, zu welcher Teilmenge ein Element der gegebenen
Menge aktuell gehört (/* Find-Operation */)
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal - Einschub: Union-Find-Strukturen
1
1
3
2
3
 Beispiel
6
•
4/2, Folie 19
3
Z = { {1}, {2}, {3}, {4}, {5} }
4
•
Z = { {1,2}, {3}, {4}, {5} } (/* Kante {1,2} in E‘ aufgenommen */)
•
Z = { {1,2}, {3,4}, {5} } (/* Kante {3,4} in E‘ aufgenommen */)
•
Z = { {1,2,3,4}, {5} } (/* Kante {2,3} in E‘ aufgenommen */)
•
Z = { {1,2,3,4}, {5} } (/* Kante {2,4} nicht in E‘ aufgenommen */)
•
Z = { {1,2,3,4,5} } (/* Kante {3,5} in E‘ aufgenommen */)
© 2011 Prof. Steffen Lange
-
HDa/FbI
2
-
Graphen und Optimierung
4
5
5
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal - Einschub: Union-Find-Strukturen
 Namensgebung von Mengen
•
•
v1,...,vn dienen als Namen für die Teilmengen { v1 },...,{ vn }
allgemein dient ein ausgezeichnetes Element v ∈ V als Name für eine
Teilmenge Vi ⊆ V
 relevante Operation
4/2, Folie 20
•
union(vi,vk) – Menge der verwalteten Teilmengen ändern, indem die
Teilmengen mit den Namen vi bzw. vk vereinigt werden
•
find(v) – den Namen der Teilmenge bestimmen, die aktuell das
Element v enthält
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal - Einschub: Union-Find-Strukturen
 Realisierung von Union-Find-Strukturen (/* konzeptionell */)
•
repräsentiere Teilmengen als Bäume beliebiger Ordnung
•
•
•
•
4/2, Folie 21
jeder Knoten hat ein Element von V als Label
jeder Knoten hat einen Zeiger auf seinen Vater
die Wurzel hat einen Zeiger auf sich selbst
das Label der Wurzel „dient“ als Name für diese Teilmenge
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal - Einschub: Union-Find-Strukturen
 Illustration
einelementige Teilmengen
{2}
2
mehrelementige Teilmengen
1
3
{ 1,3,5,7 }
5
7
4/2, Folie 22
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal - Einschub: Union-Find-Strukturen
 Realisierung von Union-Find-Strukturen (/* konzeptionell */)
Find-Operation
... gib das Label der Wurzel des Baums
zurück, in dem das Element v gespeichert ist
4
6
... find(6) = find(2) = find(4) = 4
2
{ 2,4,6 }
Union-Operation ... mache die Wurzel das Baums für die Teilmenge v2
zum Sohn der Wurzel des Baums für die Teilmenge v1
4
6
4
1
2
6
3
{ 2,4,6 } ∪ { 1,3 } = { 1,2,3,4,6 }
4/2, Folie 23
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
1
2
3
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal - Einschub: Union-Find-Strukturen
 Implementierung von Union-Find-Strukturen (/* Version 1 */)
... verwenden ein eindimensionales Array zur Repräsentation aller Bäume
(/* Array P, das mit den Elementen in V indiziert ist */)
Väter
1
2
3
4
5
6
7
1
2
4
1
5
5
7
zugehörige Teilmengen:
4/2, Folie 24
© 2011 Prof. Steffen Lange
-
HDa/FbI
{ 1,3,4 }
{2}
{ 5,6 }
{7}
-
Graphen und Optimierung
Elemente
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal - Einschub: Union-Find-Strukturen
 Implementierung von Union-Find-Strukturen (/* Version 1 */)
4/2, Folie 25
Initialisierung
for ( int v = 1; v <= n; ++v )
P[v] = v;
... in Zeit O(n)
Union-Operation
void union ( int v1, int v2 ) {
P[v2] = v1;
}
... in Zeit O(1)
Find-Operation
int find ( int v ) {
while ( P[v] != v ) {
v = P[v];
}
return(v);
}
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
... in Zeit O(n)
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal - Einschub: Union-Find-Strukturen
 Implementierung von Union-Find-Strukturen (/* Version 2 */)
... verwenden zwei eindimensionale Arrays zur Repräsentation aller Bäume
(/* Array P, das mit den Elementen in V indiziert ist; Array M, das mit den
Elementen in V indiziert ist; */)
Väter
Mächtigkeit
der Teilmengen
1
2
3
4
5
6
7
1
2
4
1
5
5
7
3
1
1
2
2
1
1
zugehörige Teilmengen:
4/2, Folie 26
© 2011 Prof. Steffen Lange
-
HDa/FbI
{ 1,3,4 }
{2}
{ 5,6 }
{7}
-
Graphen und Optimierung
Elemente
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal - Einschub: Union-Find-Strukturen
 Implementierung von Union-Find-Strukturen (/* Version 2 */)
for ( int v = 1; v <= n; ++v ) {
P[v] = v; M[v] = 1;
}
Initialisierung
void union ( int v1, int v2 ) {
if ( M[v1] > M[v2] ) {
P[v2] = v1;
M[v1] = M[v1] + M[v2];
}
else {
P[v1] = v2;
M[v2] = M[v2] + M[v1];
}
}
Union-Operation
4/2, Folie 27
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
... in Zeit O(1)
... aber, in
Zeit O(log(n))
... wie gehabt
Find-Operation
... in Zeit O(n)
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal - Einschub: Union-Find-Strukturen
 Begründung – Laufzeit der Find-Operation (/* Version 2 */)
•
für einelementige Teilmengen gilt: tiefe(B) ≤ log(n)
•
es seien V1, V2 Teilmengen mit n1 bzw. n2 Elementen, wobei n1 ≥ n2
gilt (/* nach IV gilt für die zugehörigen Bäume B1 und B2: tiefe(B1) ≤
log(n1) und tiefe(B2) ≤ log(n2) */)
Fall 1:
tiefe(B) = tiefe(B1)
 log(n) = log(n1 + n2) ≥ log(n1) ≥ tiefe(B1)
B1
4/2, Folie 28
© 2011 Prof. Steffen Lange
-
B1
B2
HDa/FbI
-
Graphen und Optimierung
B2
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal - Einschub: Union-Find-Strukturen
 Begründung – Laufzeit der Find-Operation (/* Version 2 */)
•
für einelementige Teilmengen gilt: tiefe(B) ≤ log(n)
•
es seien V1, V2 Teilmengen mit n1 bzw. n2 Elementen, wobei n1 ≥ n2
gilt (/* nach IV gilt für die zugehörigen Bäume B1 und B2: tiefe(B1) ≤
log(n1) und tiefe(B2) ≤ log(n2) */)
Fall 2:
tiefe(B) = tiefe(B2) + 1
 log(n) = log(n1 + n2) ≥ log(2n2) ≥ log(2) + log(n2) ≥ 1 + tiefe(B2)
B1
B2
B1
4/2, Folie 29
© 2011 Prof. Steffen Lange
-
HDa/FbI
B2
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal
 Datenstruktur
•
4/2, Folie 30
eine Union-Find-Struktur (/* Version 2 */) zur Verwaltung der sukzessive
erzeugten Zusammenhangskomponenten des Teilgraphen G‘ = (V,E‘)
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Kruskal
 Realisierung (/* Version 2 */)
1)
2)
3)
bestimme eine Liste L, in der alle Kanten e von G bzgl. ihrer
Gewichte w(e) aufsteigend sortiert sind
setze E‘ = ∅ und initialisiere die Union-Find-Struktur für die
Knotenmenge V
solange |E‘| < n - 1 ist
•
•
•
bestimme die Kante e = {u,v} mit dem minimalen Gewicht
in L und streiche e aus L
bestimme a = Find(u) und b = Find(v)
falls a ≠ b ist, setze E‘ = E‘ ∪ { e } und rufe Union(a,b) auf
... Schritt 2) benötigt zusätzlich die Zeit O(n)
... Schritt 3) wird höchstens m mal durchgeführt und benötigt jeweils
die Zeit O(log(n))
... also benötigt diese Version die Zeit O(m*log(m) + m*log(n))
4/2, Folie 31
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Algorithmische Idee
1)
2)
setze E‘ = ∅ und V‘ = { 1 }
solange |V‘| < n ist
•
•
bestimme eine Kante e = { u,v } mit dem kleinsten Gewicht,
für die u ∈ V‘ und v ∉ V‘ gilt
setze E‘ = E‘ ∪ { e } und V‘ = V‘ ∪ { v },
... Anmerkung über die Korrektheit dieses Verfahrens müssen wir
nicht reden, da sicher gestellt ist, dass die ausgewählte Kante e
immer eine sichere Kante ist (/* wähle den Schnitt (V‘,V \ V‘) */)
4/2, Folie 32
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Beispiel
1
1
6
2
2
3
6
5
1
1
6
3
© 2011 Prof. Steffen Lange
-
HDa/FbI
4
6
2
4
3
-
5
7
5
4
6
4
1
3
6
5
4/2, Folie 33
4
3
2
5
3
1
4
5
7
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Beispiel
1
1
6
2
2
3
6
5
1
1
6
3
© 2011 Prof. Steffen Lange
-
HDa/FbI
4
6
2
4
3
-
5
7
5
4
6
4
1
3
6
5
4/2, Folie 34
4
3
2
5
3
1
4
5
7
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Beispiel
1
1
6
2
2
3
6
5
1
1
6
3
© 2011 Prof. Steffen Lange
-
HDa/FbI
4
6
2
4
3
-
5
7
5
4
6
4
1
3
6
5
4/2, Folie 35
4
3
2
5
3
1
4
5
7
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Beispiel
1
1
6
2
2
3
6
5
1
1
6
3
© 2011 Prof. Steffen Lange
-
HDa/FbI
4
6
2
4
3
-
5
7
5
4
6
4
1
3
6
5
4/2, Folie 36
4
3
2
5
3
1
4
5
7
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Beispiel
1
1
6
2
2
3
6
5
1
1
6
3
© 2011 Prof. Steffen Lange
-
HDa/FbI
4
6
2
4
3
-
5
7
5
4
6
4
1
3
6
5
4/2, Folie 37
4
3
2
5
3
1
4
5
7
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Beispiel
1
1
6
2
2
3
6
5
1
1
6
3
© 2011 Prof. Steffen Lange
-
HDa/FbI
4
6
2
4
3
-
5
7
5
4
6
4
1
3
6
5
4/2, Folie 38
4
3
2
5
3
1
4
5
7
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Anmerkungen
•
bei der Realisierung wird man ein wenig anders vorgehen (/* um die
Menge der Kanten, die als neu aufzunehmende Kante infrage kommen,
geschickt zu „verwalten“ */)
 Zugrunde liegende Datenstrukturen
•
•
•
•
4/2, Folie 39
die zu G gehörende Adjazenzliste A[1..n]
eine Menge M, in der sich die nicht zu V‘ gehörenden Knoten gemerkt
werden
ein Array P[1..n] (/* in dem sich für die einzelnen Knoten der Vorgänger
„gemerkt“ wird; diese Informationen liefern dann die Kantenmenge E‘ */)
eine Array K[1..n] (/* in dem sich für die einzelnen Knoten v „gemerkt“
wird; welches minimale Gewicht eine Kante von einem Knoten u in V‘
zu v „aktuell“ hat */)
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Realisierung
1)
2)
3)
4/2, Folie 40
setze P[j] = 0 und K[j] = +∞ für alle j = 1,...,n
setze K[1] = 0 und M = V
while M ≠ ∅ do
•
bestimme ein u ∈ V, für das K[u] minimal ist und
setze M = M \ { u }
•
for all v ∈ A[u] do
if v ∈ V und w({u,v}) < K[v] then
setze P[v] = u und K[v] = w({u,v})
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Beispiel
1
1
6
2
2
3
6
5
1
1
6
3
4
6
2
4
3
© 2011 Prof. Steffen Lange
-
•
P[1] = 0, K[1] = 0
•
•
•
P[1] = 0, K[1] = 0
P[2] = 1, K[2] = 1
P[5] = 1, K[5] = 6
5
7
5
4
6
4
1
3
6
5
4/2, Folie 41
4
3
2
5
3
1
HDa/FbI
4
5
7
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Beispiel
1
1
6
2
2
3
6
5
1
1
6
3
4
6
2
4
3
© 2011 Prof. Steffen Lange
-
5
•
•
•
P[1] = 0, K[1] = 0
P[2] = 1, K[2] = 1
P[5] = 1, K[5] = 6
•
•
•
•
P[1] = 0, K[1] = 0
P[2] = 1, K[2] = 1
P[5] = 2, K[5] = 3
P[3] = 2, K[3] = 2
7
5
4
6
4
1
3
6
5
4/2, Folie 42
4
3
2
5
3
1
HDa/FbI
4
5
7
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Beispiel
1
1
6
2
2
3
6
5
1
1
6
3
4
6
2
4
3
© 2011 Prof. Steffen Lange
-
5
•
•
•
•
P[1] = 0, K[1] = 0
P[2] = 1, K[2] = 1
P[5] = 2, K[5] = 3
P[3] = 2, K[3] = 2
•
•
•
•
•
•
•
P[1] = 0, K[1] = 0
P[2] = 1, K[2] = 1
P[5] = 2, K[5] = 3
P[3] = 2, K[3] = 2
P[4] = 3, K[4] = 5
P[6] = 3, K[6] = 4
P[7] = 3, K[7] = 4
7
5
4
6
4
1
3
6
5
4/2, Folie 43
4
3
2
5
3
1
HDa/FbI
4
5
7
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Beispiel
1
1
6
2
2
3
6
5
1
1
6
3
4
6
2
4
3
© 2011 Prof. Steffen Lange
-
5
7
5
4
6
4
1
3
6
5
4/2, Folie 44
4
3
2
5
3
1
HDa/FbI
4
5
7
-
•
•
•
•
•
•
•
P[1] = 0, K[1] = 0
P[2] = 1, K[2] = 1
P[5] = 2, K[5] = 3
P[3] = 2, K[3] = 2
P[4] = 3, K[4] = 5
P[6] = 3, K[6] = 4
P[7] = 3, K[7] = 4
•
•
•
•
•
•
•
P[1] = 0, K[1] = 0
P[2] = 1, K[2] = 1
P[5] = 2, K[5] = 3
P[3] = 2, K[3] = 2
P[4] = 3, K[4] = 5
P[6] = 5, K[6] = 3
P[7] = 3, K[7] = 4
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Beispiel
1
1
6
2
2
3
6
5
1
1
6
3
4
6
2
4
3
© 2011 Prof. Steffen Lange
-
5
7
5
4
6
4
1
3
6
5
4/2, Folie 45
4
3
2
5
3
1
HDa/FbI
4
5
7
-
•
•
•
•
•
•
•
P[1] = 0, K[1] = 0
P[2] = 1, K[2] = 1
P[5] = 2, K[5] = 3
P[3] = 2, K[3] = 2
P[4] = 3, K[4] = 5
P[6] = 5, K[6] = 3
P[7] = 3, K[7] = 4
•
•
•
•
•
•
•
P[1] = 0, K[1] = 0
P[2] = 1, K[2] = 1
P[5] = 2, K[5] = 3
P[3] = 2, K[3] = 2
P[4] = 3, K[4] = 5
P[6] = 5, K[6] = 3
P[7] = 6, K[7] = 1
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Beispiel
1
1
6
2
2
3
6
5
1
1
6
3
4
6
2
4
3
© 2011 Prof. Steffen Lange
-
5
7
5
4
6
4
1
3
6
5
4/2, Folie 46
4
3
2
5
3
1
HDa/FbI
4
5
7
-
•
•
•
•
•
•
•
P[1] = 0, K[1] = 0
P[2] = 1, K[2] = 1
P[5] = 2, K[5] = 3
P[3] = 2, K[3] = 2
P[4] = 3, K[4] = 5
P[6] = 5, K[6] = 3
P[7] = 6, K[7] = 1
•
•
•
•
•
•
•
P[1] = 0, K[1] = 0
P[2] = 1, K[2] = 1
P[5] = 2, K[5] = 3
P[3] = 2, K[3] = 2
P[4] = 3, K[4] = 5
P[6] = 5, K[6] = 3
P[7] = 6, K[7] = 1
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Beispiel
1
1
6
2
2
3
6
5
1
1
6
3
4
6
2
4
3
© 2011 Prof. Steffen Lange
-
5
7
5
4
6
4
1
3
6
5
4/2, Folie 47
4
3
2
5
3
1
HDa/FbI
4
5
7
-
•
•
•
•
•
•
•
P[1] = 0, K[1] = 0
P[2] = 1, K[2] = 1
P[5] = 2, K[5] = 3
P[3] = 2, K[3] = 2
P[4] = 3, K[4] = 5
P[6] = 5, K[6] = 3
P[7] = 6, K[7] = 1
•
•
•
•
•
•
•
P[1] = 0, K[1] = 0
P[2] = 1, K[2] = 1
P[5] = 2, K[5] = 3
P[3] = 2, K[3] = 2
P[4] = 3, K[4] = 5
P[6] = 5, K[6] = 3
P[7] = 6, K[7] = 1
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Realisierung
1)
2)
3)
setze P[j] = 0 und K[j] = +∞ für alle j = 1,...,n
setze K[1] = 0 und M = V
while M ≠ ∅ do
•
bestimme ein u ∈ V, für das K[u] minimal ist und
setze M = M \ { u }
•
for all v ∈ A[u] do
if v ∈ V und w({u,v}) < K[v] then
setze P[v] = u und K[v] = w({u,v})
... Schritt 1) benötigt die Zeit O(n)
... Schritt 3) wird höchstens n mal durchgeführt und benötigt zum
Testen, ob M ≠ ∅ gilt, und zum Finden von u jeweils die Zeit O(n)
... in Schritt 3) wird für das Anpassen der Werte in den Arrays P und
und K insgesamt die Zeit O(m) benötigt
... also benötigt diese Version die Zeit O(n + n2 + m)
4/2, Folie 48
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 4: Minimal spannende Bäume
Das Verfahren von Prim
 Anmerkungen
•
•
wenn der gegebene Graph „deutlich“ weniger als n2 viele Kanten hat, so
kann man noch geschickter vorgehen
statt M als Menge zu speichern, wird M „geschickt“ als Prioritätswarteschlange „verwaltet“ (/* die Prioritäten werden durch die Werte im Array K
festgelegt */)
... dann kann man einen Knoten u mit dem minimalen Wert im
Array K in Zeit O(log(n)) finden (/* man muss jedoch in Kauf
nehmen, das jede Anpassung der Werte im Array K auch die
Zeit O(log(n)) kostest, da damit implizit die Prioritätswarteschlange modifiziert wird */)
4/2, Folie 49
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Herunterladen