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