1.2 Darstellung von Graphen im Computer (1) G = (V,E) sei ein

Werbung
1.2
Darstellung von Graphen im Computer
(1) G = (V, E) sei ein schlichter Graph mit V = {x1 , . . . , xn }.
Dann heißt A = (aij ) i, j = 1, . . . , n mit
1 f alls xi xj ∈ E
aij =
0 sonst
Adjazenzmatrix von G.
(2) G = (V, E) sei ein schlichter Graph mit V = {x1 , . . . , xn }
und E = {e1 , . . . , em }. Dann heißt B = (bij ) i =
1, . . . , n, j = 1, . . . , m mit
1 f alls xi Endknoten von ej
bij =
0 sonst
Inzidenzmatrix von G.
(3) In einer Adjazenzliste wird für jeden Knoten x die Liste Lx
der zu x inzidenten Kanten durch Angabe der jeweiligen
Endknoten (Nachbarn von x) beschrieben:
Knoten Liste der N achbarn
5
1.3
Bäume
Definition:
G heißt Wald ⇐⇒ G enthält keinen Kreis (G ist kreisfrei).
G heißt Baum ⇐⇒ G ist zusammenhängend und kreisfrei.
Ein Knoten x ∈ V heißt Blatt ⇐⇒ d(x) = 1
Satz 1.1 Es sei G = (V, E) ein Graph mit |V | = n ≥ 1. Dann
gilt G ist Baum ⇔ G ist kreisfrei und |E| = n − 1
2
2.1
Algorithmen auf Graphen
Minimalgerüste
Beispiele: Serie 1, Aufgabe 2, Telekomnetz Baden-Würtemberg
Definition: Sei G = (V, E) ein Graph. Ein Untergraph T =
(V , E ) heißt Gerüst von G, falls V = V , E ⊆ E und T ist ein
Baum.
Satz 2.1 Der vollständige Graph Kn mit V (Kn ) = {1, . . . , n}
und E(Kn ) = {ij ; 1 ≤ i < j ≤ n} hat nn−2 Gerüste.
s. Hausaufgabe: K4 hat 16 Gerüste.
K20 hat 2018 = 2, 62... · 1023 Gerüste.
K50 hat 5048 = 3, 55... · 1081 Gerüste.
Problem:
Gegeben: zusammenhängender schlichter Graph G, Kantengewichtsfunktion f : E(G) → R
Gesucht: Ein Gerüst T von G mit f (T ) :=
f (e) → min
e∈E(T )
6
Bezeichnung: Ein Gerüst T0 von G wird Minimalgerüst (minimum spanning tree) von (G, f ) (oder kürzer von G) genannt,
falls f (T0 ) ≤ f (T ) ist, für alle Gerüste T von G.
f wird auch kurz Kostenfunktion genannt.
3
2
2
1
5
3
1
7
Beispiel:
4
8
4
3
5
3
1
2
6
4
2
8
9
9
5
8
Satz 2.2 Sei G ein zusammenhängender Graph mit Kostenfunktion f : E → R. Ferner sei u ⊆ V und e0 ∈ E eine Kante
zwischen U und V \ U mit minimalem Gewicht. Dann existiert
ein Minimalgerüst T0 , das die Kante e0 enthält.
Algorithmus 2.1 (Prim)
Eingabe: zusammenhängender Graph G = (V, E) mit V =
{1, . . . , n} und eine Kostenfunktion f : E → R mit f (ij) = ∞
⇐⇒ ij ∈ E.
1. Initialisierung: Setze t := 1; B := ∅; U := {1};
for all i, j ∈ V, i = j, setze d(ij) = f (ij); (technische
Maßnahme)
2. bestimme einen Knoten u ∈ V \ U mit
d(tu) = min{d(tv) ; v ∈ V \ U };
(d(tv) ist der minimale Abstand eines Knoten v ∈ V \ U zu
einem Knoten t ∈ U )
7
bestimme eine Kante e := xu ∈ E mit f (e) = d(tu) und
x ∈ U ; (da G zusammenhängend ist, ist d(tu) endlich)
3. B := B ∪ {e};
4. U := U ∪ {u};
5. Falls U = V : Neuberechnung von d(tv)
für alle v ∈ V \ U setze d(tv) := min{d(tv), d(uv)}; (Dies
ist der Abstand von v zum nächstgelegenen Knoten aus U )
6. Wiederhole die letzten 4 Schritte bis U = V ist
Ausgabe: Die Kantenmenge B eines Minimalgerüstes von G
Bemerkung: Der Algorithmus ist ein Beispiel für die sogenannte Greedy-Methode (greedy = gefräßig, raffgierig), die in jedem
Schritt unter Berücksichtigung der Nebenbedingungen das lokal
beste Element auswählt.
8
3
2
2
1
5
3
1
7
4
8
4
3
5
3
1
2
6
4
2
8
9
9
5
8
Starte mit t = 1
v ∈V \U
d(tv)
d(uv)
d(tv)
d(uv)
d(tv)
d(uv)
d(tv)
d(uv)
d(tv)
d(uv)
d(tv)
d(uv)
d(tv)
d(uv)
d(tv)
2
2
∞
2
-
3
3
∞
3
5
3
1
1
-
4
∞
∞
∞
3
3
∞
3
4
3
-
5
∞
∞
∞
∞
∞
3
3
∞
3
8
3
-
6
∞
2
2
∞
2
-
B = {17, 12, 67, 63, 24, 56, 58, 59}
9
7
1
-
8
∞
9
9
∞
9
8
8
∞
8
∞
8
2
2
-
9
∞
∞
∞
∞
∞
∞
∞
∞
∞
∞
∞
4
4
5
4
u = 7, e = 17
u = 2, e = 12
u = 6, e = 67
u = 3, e = 63
u = 4, e = 24
u = 5, e = 56
u = 8, e = 58
u = 9, e = 59
2.2
Kürzeste Wege, Algorithmus von Dijkstra
Gegeben:
• zusammenhängender schlichter Graph G mit n ≥ 2 Knotenpunkten
• f : Kantenbewertung (Kostenfunktion) von G,
f : E(G) → R
• s, t: zwei Knotenpunkte von G mit s = t
Gesucht:
Ein Weg W zwischen s und t in G mit
f (e) → min .
f (W ) :=
e∈E(W )
Definitionen:
1. Ist f : E → R eine Kantenbewertung von G, so heißt (G, f )
kurz Netzwerk.
2. Ein Weg W = (x0 , x1 , . . . , xl ) in G mit Anfangsknoten x0
und Endknoten xl wird kurz (x0 , xl )-Weg genannt. Wir nennen xi−1 den Vorgänger von xi in W und W = (x0 , . . . , xi )
den (x0 , xi )-Teilweg von W
3. f (W ):=
f (e)
e∈E(W )
4. Ein kürzester (x, y)-Weg in (G, f ) ist ein (x, y)-Weg W0
in G mit f (W0 ) ≤ f (W ) für alle (x, y)-Wege W in
G. Die Länge eines kürzesten (x, y)-Weges wird mit
dist(x, y):=f (W0 ) bezeichnet.
10
Satz 2.3 Es sei (G, f ) ein Netzwerk mit f (e) ≥ 0 für alle e ∈
E(G), und es seien x, y zwei verschiedene Knoten von G.
Ist W0 ein kürzester (x, y)-Weg in (G, f ) und ist y der
Vorgänger von y in W0 , so ist der (x, y )-Teilweg W von W
ein kürzester (x, y )-Weg in (G, f ).
Algorithmus 2.2 (Dijkstra)
Eingabe: zusammenhängender Graph G = (V, E) mit Kostenfunktion f : E → R+ und Startknoten x1 ∈ V = {x1 , . . . , xn }.
1. Initialisierung:
für j := 1, . . . , n setze d(xj ) := ∞; B := ∅
2. x = x1 , d(x1 ) := 0;
OFFEN:=V \ {x1 }; (OFFEN= Menge der Knoten xi , für
die die permanente Distanz d(xi ) := dist(x1 , xi ) noch nicht
bekannt ist.)
3. für alle xi ∈ OF F EN mit xxi ∈ E setze
dt (xi ) := d(x) + f (xxi );
4. für alle xi ∈ OF F EN mit xxi ∈ E setze
d(xi ) := min{d(xi ), dt (xi )}; (Neuberechnung des Abstandes)
v(xi ) := x falls d(xi ) = dt (xi ); (Bestimmung des
Vorgängers)
5. wähle ein x ∈ OFFEN
mit d(x) = min{d(y) : y ∈ OF F EN };
setze OF F EN := OF F EN \ {x};
falls x = x1 , setze B := B ∪ {v(x)x}
6. Wiederhole die letzten drei Schritte bis OF F EN = ∅
11
Ausgabe: Eine Liste d(xi ) (i = 1, . . . , n), die die Distanzen
dist(x1 , xi ) = d(xi ) enthält, sowie die Kantenmenge B eines
Gerüstes von G, wobei der eindeutige (x1 , xi )-Weg in G[B] stets
ein kürzester (x1 , xi )-Weg in G ist.
Beispiel:
10
2
13
1
16
13
8
11
13
4
13
17
17
3
12
6
22
8
13
10
5
21
18
16
11
16
12
7
12
9
10
15
d(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
d(x) + f (xxi )
d(xi )
v(xi )
1
0
-
2
∞
13
13
1
3
∞
16
16
1
25
16
1
4
∞
12
12
1
5
∞
-
-
16
1
24
16
1
-
-
-
-
33
33
4
29
29
7
21
21
2
33
21
2
-
-
-
-
-
-
13
1
13
1
-
6
∞
23
23
2
23
2
38
23
2
7
∞
13
13
1
23
13
1
8
∞
9
∞
10
∞
x=1
x=4
x=7
-
31
31
7
25
25
7
x=2
-
31
7
25
7
x=3
-
25
7
x=5
25
7
x=6
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
31
7
45
31
7
36
31
7
35
31
7
-
-
-
-
-
-
-
-
-
13
25
7
-
39
39
6
40
39
6
44
39
6
x=9
8
10
Herunterladen