Programmierung und Programmiersprachen Sommersemester 2006

Werbung
Programmierung und Programmiersprachen
Sommersemester 2006
Lehrstuhl für Angewandte Telematik / ee-Business
Institut für Informatik
Universität Leipzig
Stiftungslehrstuhl der Deutschen Telekom AG
[email protected]
www.lpz-ebusiness.de
+49 (341) 97 323 30
PuPS
26.06.2006
Warshall‘s Algorithmus
PuPS
2
1
Kürzeste Entfernung zweier Knoten
PuPS
3
Implementierung: Kürzester Pfad
PuPS
4
2
Beispiel: Kürzester Pfad
PuPS
5
Mehr zu Graphen / Kruskal
PuPS
6
3
Definition: Spannbaum
• Ein zusammenhängender ungerichteter Graph G ist ein
Spannbaum, falls |E| = |V| – 1.
• Ein Spannbaum hat so wenige Kanten, dass er keinen Zyklus
enthalten kann.
• Jeder zusammenhängende Graph besitzt einen
Spannbaum, im Allgemeinen sind sogar mehrere möglich.
• einfache Konstruktionsvorschrift: Solange es einen Zyklus
im Graphen gibt, entferne eine Kante aus diesem Zyklus.
PuPS
7
Definition: Kostengraph
• (V, E, c) heißt Kostengraph, falls (V,E) ein
zusammenhängender ungerichteter Graph und c: E -> Nat
eine Abbildung ist. Für eine Teilmenge F ⊆ E von Kanten
können wir die Kosten cF für diese Kantenmenge angeben
als die Summe aller Kosten, die von den einzelnen Kanten
verursacht wird:
cF = ∑f∈F c(f)
PuPS
8
4
Definition: minimaler Spannbaum
• Ist G = (V, E) ein attributierter zusammenhängender
ungerichteter Graph, so ist S = (V, F) ein minimaler
Spannbaum, falls die folgenden Bedingungen erfüllt sind:
• Die Kantenmenge F ist eine Teilmenge der Kantenmenge E.
• S ist ein Spannbaum.
• Ist S‘ = (V, F‘) ein weiterer Spannbaum mit F‘ ⊆ E, so ist
die Summe der Attribute aller Kanten in F kleiner als oder gleich
der Summe der Attribute aller Kanten in F‘, also cF ≤
cF‘.
PuPS
9
Definition: minimaler Spannbaum
¾ Ein minimaler Spannbaum ist der „billigste“ Teilgraph
(d.h. der mit der kleinsten Summe der Attributwerte),
der die Verbindung aller Knoten des Graphen erlaubt.
• Wenn die Attribute der Kanten paarweise verschieden sind,
kann es nur einen minimalen Spannbaum geben.
PuPS
10
5
Beispiel: minimaler Spannbaum
20
A
23
1
4
36
B
28
F
15
9
G
25
C
E
16
17
3
D
Betrachtung: Welche Kanten nimmt man intuitiv?
PuPS
11
Und das nun formal
Lemma: minimales Spannbaum = billigster Teilgraph
Lemma: Züchten
PuPS
12
6
Konstruktion des min. Spannbaums
• Ansatz: Sind zwei minimale Spannbäume gegeben, so
entsteht bei ihrer Verbindung über eine Kante mit
minimalem Attributwert ein größerer minimaler Spannbaum.
• Algorithmus von Kruskal
• Menge Q enthält alle Kanten des Graphen
• Menge C ist eine Partition von V (d.h. eine Menge von
Teilmengen der Knotenmenge) mit diesen Eigenschaften:
• kein Element aus C ist die leere Menge
• die Elemente aus C sind paarweise disjunkt
• die Vereinigung aller Elemente aus C ergibt die Knotenmenge V
• Menge F wird Kanten des minimalen Spannbaums
enthalten
PuPS
13
Algorithmus von Kruskal
• Initialisierung:
• alle Kanten des Graphen werden nach aufsteigenden Attributwerten
sortiert in Q eingefügt
• C wird zu {{v}: v ∈V} initialisiert (d.h. jede Teilmenge enthält nur
einen Knoten)
• F wird auf die leere Menge gesetzt
• Beispiel:
Q
Kante AG DE FG EG EF DG CD AF
Attribut
1
3
4
9
15
16
17
20
AB CG BC BG
23
25
28
36
• Q = {AG, DE, FG, EG, EF, DG, CD, AF, AB, CG, BC, BG}
• C = {A, B, C, D, E, F, G}
vereinfachte Notation für Q und F:
• F=∅
XY steht für Kante (X, Y)
vereinfachte Notation für C:
XY steht für Teilmenge {X, Y}
PuPS
14
7
Algorithmus von Kruskal
Selektion der Kanten des Spannbaums:
• solange C mehr als ein Element enthält:
• entferne die Kante (x, y) mit den geringsten Kosten aus Q
• falls die Kante zwei verschiedene Elemente von C verbindet
(d.h. ∃ W1, W2 ∈ C; W1 ≠ W2, x ∈ W1, y ∈ W2):
• füge die Kante (x, y) zu F hinzu und ersetze die beiden Elemente
aus C durch ihre Vereinigung
(d.h. ersetze C durch (C \ {W1, W2}) ∪ {W1 ∪ W2})
• sonst:
• verwerfe die Kante (x, y)
nach Terminierung:
• C enthält als einziges Element die Menge V aller Knoten
• F enthält die Kanten des minimalen Spannbaums
PuPS
15
8
Herunterladen