FGI Graphen 2 - Michael Gamer

Werbung
Formale Grundlagen der Informatik
Michael Gamer / 2015
1
Gewichtete Graphen
Bei vielen Anwendungen treten
gewichtete (bewertete) Graphen auf,
insbesondere bei
•
•
•
Michael Gamer
Netzwerken mit Flüssen
Modellierung von Verkehrswegen
Produktionsplänen
2
Gewichteter Graph
Ein Graph G=(V,E) zusammen mit einer Abbildung
B: E →ℝ (!) heißt gewichteter Graph. Bisweilen wird
für die Gewichtung (das Gewicht) der Kante (i,j) von i
nach j auch die Bezeichnung B(i,j), mit B(i,j) ∈ℝ
verwendet.
Wir suchen nun „kürzeste Wege“ in Graphen, d.h.
Wege (v1v2...vn) so, daß die Summe der
Kantengewichte minimal wird.
Michael Gamer
3
Minimal aufspannende Bäume
Liegt ein bewerteter Graph G vor, so stellen sich
unter anderem folgende Fragen
1.Gibt es einen Baum B der G „aufspannt“, d.h. alle
Ecken von G erreicht?
2.Wie kann ein derartiger Baum mit minimalem
Gewicht gefunden werden?
Michael Gamer
4
Beispiel
Gesucht ist ein gewichtsminimaler Baum, der den Graphen
„aufspannt“
7
2
1
1
2
2
5
4
2
2
Michael Gamer
5
Der Algorithmus von Kruskal
1.Ausgangspunkt ist ein Baum B bestehend aus einer
Knotenmenge des gewichteten Graphen, der nur
aus isolierten Ecken besteht
2.Die Kanten werden nach aufsteigendem Gewicht
sortiert
3.In jedem Schritt wird nun eine Kante minimalen
Gewichts in B eingefügt, falls diese zwei Bäume aus
B vereinigt, sonst wird diese Kante nicht verwendet.
4.Der Algorithmus terminiert mit einem minimalen
spannendenTeilbaum
Michael Gamer
6
Lösung
7
2
1
1
2
2
5
4
2
Michael Gamer
2
1
1
2
2
2
7
Der Algorithmus von Kruskal
Die Lösung, die der Algorithmus findet ist nicht
eindeutig
Oftmals gibt es mehrere, verschiedene minimale
spannende Bäume
Aufwand zur Bestimmung eines minimalen,
spannenden Baumes:
Sei G ein Graph mit n Ecken und m Kanten, dann ist
der Aufwand im ungünstigsten Fall:
O(m + n log n)
Michael Gamer
8
Der Algorithmus von Prim
Der Algorithmus von Kruskal baut einen minimalen,
spannenden Baum auf, indem er die
Zusammenhangskomponenten in jedem Schritt vereinigt.
Beim Algorithmus von Prim bilden die ausgewählten
Kanten in jedem Schritt bereits einen Baum
Algorithmus nach Prim zur Auswahl der Kanten
1.Start mit einer beliebigen Ecke des Graphen
2.Ist U die Eckenmenge des bereits konstruierten Baumes
und E die Eckenmenge des Graphen, so fügt man
diejenige Kante hinzu deren Startecke in U, deren
Endecke in E\U liegt und die kleinstes Gewicht hat.
Michael Gamer
9
Der Algorithmus von Prim
7
2
1
1
2
2
5
4
2
1
2
2
2
1
2
Ausgangsgraph
Michael Gamer
Lösung
10
Der Algorithmus von Prim
Die Lösung, die der Algorithmus findet ist ebenfalls nicht
eindeutig
Aufwand zur Bestimmung eines minimalen, spannenden
Baumes:
Sei G ein Graph mit n Ecken und m Kanten, dann ist der
Aufwand im ungünstigsten Fall:
O(m+n log n)
Bis heute ist nicht geklärt, ob es einen Algorithmus zur
Erzeugung minimaler, spannender Bäume mit Laufzeit
O(m)
gibt.
Michael Gamer
11
Kürzeste Wege in Graphen
Problemstellung
•Gegeben ist ein gewichteter Graph G = (V,E)
•Ferner eine Startecke s ∈ V
•Gesucht: Die optimale Verbindung von s zu jeder
anderen Ecke des Graphen
Eine erste Lösung dieses Problems stammt von E.W.
Dijkstra
Michael Gamer
12
Kürzeste Wege in Graphen
Literatur: Turau: „Algorithmische Graphentheorie“
Michael Gamer / 2015
Problemstellung (1)
6
2
5
4
1
3
3
2
Start
1
4
7
4
5
2
2
3
6
1
Gesucht: Kürzeste Verbindung von Knoten 1 aus
Michael Gamer
14
Problemfall
4
-1
2
1
-2
1
2
2
3
5
Der Weg von Knoten 1 zu Knoten 5 kann durch den
„Umweg“ beliebig verkürzt werden!
Michael Gamer
15
Problemstellung (2)
‣ Gegeben ist ein Graph G = (V,E) mit
Kantengewichten B(i,j)
•
Die Bewertung (das Gewicht) der Kante (i,j) sei
B(i,j)
•
B(i,i):=0 für alle i
•
B(i,j):= ∞, falls es keine Kante zwischen i und j
gibt
‣ Der Graph habe die Eigenschaft, daß es keinen
geschlossenen Weg mit negativer Kantenlänge gibt
Michael Gamer
16
Kürzeste Wege Bäume
‣ Ein kürzeste Wege Baum (kW Baum) zu einem
gerichteten Graphen G = (V,E) und Startknoten s∈E
ist ein zykelfreier Teilgraph B = (E´, V´) von G mit
folgenden Eigenschaften:
•
E´ ist gleich der Eckenmenge der
Zusammenhangskomponente von s
•
s ist Wurzel von B
•
Für jedes e∈E´ ist der eindeutige Wegs von s
nach e ein kürzester Weg von s nach e in G
Michael Gamer
17
Beispiel kw Baum
6
5
2
4
1
3
3
2
1
4
7
4
5
2
2
3
6
1
kw Baum zur Ecke 1
Michael Gamer
18
Datenstruktur für kw-Bäume
Als Datenstruktur für kw-Bäume wird meist eine
Vorgängerliste verwendet
Ecke
V
1
0
2
1
3
4
4
1
5
4
6
3
7
5
6
5
2
4
1
3
3
2
1
4
7
4
5
2
2
3
6
1
Michael Gamer
19
Optimalitätsprinzip
Für kürzeste Wege gilt das Optimalitätsprinzip:
Ist G ein gerichteter Graph ohne Zykel negativer
Länge und sind s und z Ecken aus sowie e eine
Ecke auf einem kürzesten Weg von s nach z, so
gilt:
d(s,z) ≤ d(s,e)+d(e,z)
Michael Gamer
20
Bestimmung kürzester Wege (1)
Initialisieren eines Feldes D[n], n = #E durch
‣ D[s]=0
‣ D[e]=∞ für alle e≠s
Initialisieren eins kW-Baumes in dem alle Vorgänger
auf 0 gesetzt sind.
Michael Gamer
21
Bestimmung kürzester Wege (2)
Betrachten der Ecken des Graphen in beliebiger
Reihenfolge.
Eine Ecke i ist verwendbar, falls dadurch der Wert D[j]
eines Nachfolgers von i verringert werden kann, d.h.
falls gilt:
‣ D[i]+ B[i,j] < D[j]
Damit kann die obere Grenze für d(s,j) abgesenkt
werden (auf D[i]+B[i,j]).
Michael Gamer
22
Bestimmung kürzester Wege (3)
Verwenden der Prozedur „verkürze“, zum Finden
einer besseren „Route“ von i nach j
verkürze (i,j)
If (D[i]+B[i,j]<D[j] then
D[j]:=D[i]+B[i,j]
Vorgänger[j]:=i
EndIf
Michael Gamer
23
Beispiel Dijkstra Algorithmus
2
2
3
4
Start
2
1
6
8
1
5
Michael Gamer
3
4
24
Funktionsweise des Dijkstra Algorithmus
Die Arbeitsweise ist eine sogenannte Wellenfront Strategie:
Ausgangspunkt: eine Menge PERM von Ecken für die die
entsprechende Distanz bereits bekannt ist (PERM = „permanent
markiert“)
Ausgehend von dieser Menge PERM ⊆ V wird eine Ecke
v ∈ V \ PERM
Hinzugenommen und alle (neu hinzugekommenen) Wege
werden auf Optimalität hin getestet.
Am Anfang des Algorithmus ist PERM = ∅
[Vergleichen Sie den Algorithmus mit dem Algorithmus von Prim]
Michael Gamer
25
Ablauf des Algorithmus von Dijkstra
1.Setze PERM = ∅
1. Initialisiere die Distanz zum Startknoten mit 0
2. Initialisiere die Distanzen zu den anderen Knoten mit
∞
2.Solange noch unbesuchte Knoten vorhanden sind:
1. Füge Knoten minimaler Distanz zu PERM hinzu
2. Berechne für alle unbesuchten Nachbarknoten die
Summe aus Kantengewicht und Distanz zum aktuellen
Knoten =: d
3. Falls d kleiner als die im Knoten gespeicherte Distanz
ist, so aktualisiere den Wert dort und setze den
aktuellen Knoten als Vorgänger
Michael Gamer
26
Der Dijkstra Algorithmus - Beispiel
Startknoten 1
Ziel: Kostenoptimale
Wege zu allen Knoten
2
2
3
4
2
1
6
8
1
5
Michael Gamer
3
4
27
Dijkstra Algorithmus Legende
Aktuelle
Distanz
∞
2
2
∞
3
4
0
2
1
6
8
1
Zu testende
Knoten
5
∞
Michael Gamer
3
4
∞
28
Dijkstra Algorithmus Schritt 1
4
2
2
∞
3
4
0
PERM = { 1 }
2
1
8
6
1
5
1
Michael Gamer
3
4
∞
29
Dijkstra Algorithmus Schritt 2
4 -> 3
7
2
2
3
4
0
PERM = { 1,5 }
2
1
8
6
1
3
5
1
Michael Gamer
4
4
30
Dijkstra Algorithmus Schritt 3
3
PERM = { 1, 2, 5 }
2
2
7->5
3
4
0
2
1
6
8
1
5
1
Michael Gamer
3
4
4
31
Dijkstra Algorithmus Schritt 4
PERM = { 1, 2, 4, 5 }
3
Der Knoten „4“ kommt hinzu,
da dieser minimalen
Abstand zum Startknoten
0
besitzt.
5
2
2
3
4
2
1
6
8
1
5
1
Michael Gamer
3
4
4
32
Dijkstra Algorithmus Schritt 5
3
5
2
2
3
4
= { 1, 2, 3, 4, 5 }
0
2
1
6
8
1
5
1
Michael Gamer
3
4
4
33
Herunterladen