Algorithmen und Datenstrukturen II: Graphenalgorithmen

Werbung
Algorithmen und Datenstrukturen II:
Graphenalgorithmen
Prof. Dr. Oliver Braun
Fakultät für Informatik und Mathematik
Hochschule München
Letzte Änderung: 23.05.2017 13:41
Inhaltsverzeichnis
Wofür . . . . . . . . . . . . . . . . . . . . . . . . .
Das Königsberger Brückenproblem . . . . . . . . .
Gerichteter Graph . . . . . . . . . . . . . . . . . .
Speicherung eines Graphen in einer Adjazenzmatrix
Beispiel: Graph als Adjazenzmatrix . . . . . . . . .
Speicherung in Adjazenzlisten . . . . . . . . . . . .
Doppelt verkettete Pfeilliste . . . . . . . . . . . . .
Weitere Definitionen . . . . . . . . . . . . . . . . .
Weitere Definitionen (2) . . . . . . . . . . . . . . .
Wälder und Bäume . . . . . . . . . . . . . . . . . .
Ungerichtete Graphen . . . . . . . . . . . . . . . .
Durchlaufen von Graphen . . . . . . . . . . . . . .
Gerüst eines Knotenbesuchsalgorithmus . . . . . .
Verfeinerung des Knotenbesuchsalgorithmus . . . .
Einfache Zusammenhangskomponenten . . . . . . .
Tiefen- und Breitensuche . . . . . . . . . . . . . . .
Tiefen- und Breitensuche (2) . . . . . . . . . . . . .
Kürzeste Wege . . . . . . . . . . . . . . . . . . . .
Definition bewerteter Graph und Kostenfunktion .
Definition Entfernung . . . . . . . . . . . . . . . .
Definition Bewerteter Digraph . . . . . . . . . . . .
Definition Distanzgraph . . . . . . . . . . . . . . .
Kürzeste Wege in Distanzgraphen . . . . . . . . . .
Optimalitätsprinzip . . . . . . . . . . . . . . . . . .
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
4
4
5
5
6
6
6
7
7
7
8
8
8
8
8
9
9
10
10
10
10
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Kürzeste Wege durch Hinzunahme einzelner Kanten
Idee zur Realisierung . . . . . . . . . . . . . . . . .
Idee zur Realisierung (2) . . . . . . . . . . . . . . .
Dijkstras Algorithmus . . . . . . . . . . . . . . . .
Aufgabe . . . . . . . . . . . . . . . . . . . . . . . .
Kürzeste Wege in beliebig bewerteten Graphen . .
Auswahlverfahren von Ford . . . . . . . . . . . . .
Rand verschieben bei v . . . . . . . . . . . . . . . .
Aufgabe . . . . . . . . . . . . . . . . . . . . . . . .
Minimal spannende Bäume . . . . . . . . . . . . .
Verfahren zur Lösung . . . . . . . . . . . . . . . . .
Algorithmus-Gerüst . . . . . . . . . . . . . . . . . .
Auswahlverfahren für die Kanten . . . . . . . . . .
Definition Schnitt . . . . . . . . . . . . . . . . . . .
Entscheidungsregeln . . . . . . . . . . . . . . . . .
Algorithmus von Boruvka . . . . . . . . . . . . . .
Algorithmus von Kruskal . . . . . . . . . . . . . . .
Algorithmus von Jarník, Prim, Dijkstra . . . . . . .
Aufgabe . . . . . . . . . . . . . . . . . . . . . . . .
Prof. Dr. Oliver Braun
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
11
12
12
13
13
14
14
14
15
15
15
16
16
16
16
17
17
Flüsse in Netzwerken
Flüsse in Netzwerken . . . . . . . . . . . . . . . . . .
Flüsse in Netzwerken (2) . . . . . . . . . . . . . . . .
Fluss . . . . . . . . . . . . . . . . . . . . . . . . . . .
Beispiel . . . . . . . . . . . . . . . . . . . . . . . . .
Algorithmen zur Berechnung des maximalen Flusses .
Maximaler Fluss durch zunehmende Wege . . . . . .
Abändern von Flüssen . . . . . . . . . . . . . . . . .
Restgraph . . . . . . . . . . . . . . . . . . . . . . . .
Suche des zunehmenden Weges . . . . . . . . . . . .
Maximaler Fluss . . . . . . . . . . . . . . . . . . . .
Algorithmus: Beliebig zunehmende Wege . . . . . . .
Kürzeste zunehmende Wege . . . . . . . . . . . . . .
Alle kürzesten zunehmenden Wegen . . . . . . . . . .
Beispiel: Fluss- und Restgraph . . . . . . . . . . . . .
Niveaugraph . . . . . . . . . . . . . . . . . . . . . . .
Abänderung Algorithmus . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
18
18
18
19
19
19
20
20
21
21
21
21
22
22
23
.
.
.
.
.
23
23
23
24
24
25
Zuordnungsprobleme
Zuordnungsprobleme . . . . . . . . . . .
Zuordnungsproblem formalisiert . . . . .
Maximale Zuordnung . . . . . . . . . . .
Zuordnung mit maximaler Zufriedenheit
Maximale gewichtete Zuordnung . . . .
Letzte Änderung: 23.05.2017 13:41
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Bipartiter Graph . . . . . . . . . . . . . .
Beispiel . . . . . . . . . . . . . . . . . . .
Fortsetzung Beispiel . . . . . . . . . . . .
Zuordnungsproblem in bipartiten Graphen
Beispiel als Flussgraph . . . . . . . . . . .
Zunehmende Wege . . . . . . . . . . . . .
Zurück zu G . . . . . . . . . . . . . . . . .
Alternierender Weg . . . . . . . . . . . . .
Vergrößernder alternierender Weg . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Prof. Dr. Oliver Braun
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
25
26
26
26
27
28
28
29
Wofür
• wie komme ich am schnellsten von München nach Hamburg?
• wie teile ich die Arbeitskräfte in meinem Team am Besten den Tätigkeiten zu für
die sie am Besten geeignet sind?
• wann kann der Hausbau frühestens fertig sein, wenn die einzelnen Arbeiten in der
richtigen Reihenfolge ausgeführt werden?
• wie besuche ich alle meine Kunden mit einer kürzest möglichen Rundreise?
• …
Das Königsberger Brückenproblem
Über alle Brücken genau einmal laufen und am Ausgangspunkt ankommen.
Unmöglich (1736, Euler).
Gerichteter Graph
• ein gerichteter Graph (engl: digraph) besteht aus
– einer Menge V = {1, 2, ...., |V |} von Knoten (engl: vertices) und
Letzte Änderung: 23.05.2017 13:41
3
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
– einer Menge von E ⊆ V × V von Pfeilen (engl: edges, arcs)
• ein Paar (v, v ′ ) ∈ E heißt Pfeil von v nach v ′
– v heißt Anfangsknoten von (v, v ′ )
– v ′ heißt Endknoten von (v, v ′ )
– dann heißen v und v ′ auch adjazent
• Frage: Kann es nach obiger Definition parallele Pfeile geben?
Speicherung eines Graphen in einer Adjazenzmatrix
Ein Graph G = (V, E) wird in einer Boole’schen |V | × |V |-Matrix AG = (aij ) mit
1 ≤ i ≤ |V |, 1 ≤ j ≤ |V | gespeichert, wobei
{
aij =
0
1
falls (i, j) ̸∈ E
falls (i, j) ∈ E
Beispiel: Graph als Adjazenzmatrix
Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen
Speicherung relativ ineffizient (quadratischer Aufwand)
Letzte Änderung: 23.05.2017 13:41
4
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Speicherung in Adjazenzlisten
• für jeden Knoten eine lineare, verkettete Liste der von diesem ausgehenden Pfeile
• Beispiel:
Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen
Doppelt verkettete Pfeilliste
doubly connected arc list (DCAL)
Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen
Letzte Änderung: 23.05.2017 13:41
5
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Weitere Definitionen
• Eingangsgrad indeg(v) ist Anzahl der in v einmündenen Pfeile
• Ausgangsgrad outdeg(v) ist Anzahl der von v ausgehenden Pfeile
• Ein Digraph G′ = (V ′ , E ′ ) ist ein Teilgraph von G = (V, E), geschrieben G′ ⊆ G
falls
– V ′ ⊆ V und E ′ ⊆ E
• für V ′ ⊆ V induziert V ′ den Teilgraphen (V ′ , E ∩ (V ′ × V ′ )), auch Untergraph
genannt
• ein Weg von v nach v ′ mit v, v ′ ∈ V ist der durch eine Folge von (v0 , v1 , ..., vk ) von
Knoten mit v0 = v, vk = v ′ und (vi , vi+1 ) ∈ E für 0 ≤ i < k beschriebene Teilgraph
(V ′ , E ′ )
– die Anzahl der Pfeile in E ′ sind die Länge des Weges
– ein Weg heißt einfach, wenn kein Knoten mehrfach besucht wird
Weitere Definitionen (2)
• ein Zyklus ist ein Weg von v nach v
• triviale Wege die aus einem Knoten und keinem Pfeil bestehen, werden nicht betrachtet
• ein Digraph heißt zyklenfrei oder azyklisch wenn er keine Zyklen enthält
• gibt es einen Weg von v nach v ′ , ist v ′ von v erreichbar
Wälder und Bäume
• ein Digraph heißt gerichteter Wald, wenn E zyklenfrei und jeder Knoten einen
Eingangsgrad von höchstens 1 hat
– jeder Knoten mit indeg(v) = 0 heißt Wurzel
– ein gerichteter Wald mit genau einer Wurzel heißt gerichteter Baum
(Wurzelbaum)
• für einen Digraphen G = (V, E) ist ein gerichteter Wald W = (V, F ) mit F ⊆ E
ein spannender Wald von G
– falls W ein Baum ist, heißt er spannender Baum (spanning tree)
Letzte Änderung: 23.05.2017 13:41
6
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Ungerichtete Graphen
• wenn wir erzwingen, dass zwischen zwei Knoten entweder kein Pfeil oder in jeder
Richtung ein Pfeil ist, können wir die Richtung weglassen
• ein solcher Graph G = (V, E) für den gilt (v, v ′ ) ∈ E ⇔ (v ′ , v) ∈ E heißt ungerichteter Graph oder einfach Graph
• ein Paar ((v, v ′ ), (v ′ , v)) heißt Kante
• der Grad deg(v) ist dann gleich indeg(v) und auch outdeg(v)
• ein ungerichteter Graph heißt zyklenfrei oder azyklisch, falls er keinen einfachen
Zyklus mit wenigstens 3 Pfeilen enthält
– Erinnerung: Bei einem einfachen Pfad darf kein Knoten mehrfach besucht
werden
Durchlaufen von Graphen
• für manche Probleme ist es wichtig alle Knoten eines Graphen zu betrachten (zu
besuchen)
• z.B. in einem Labyrinth, Kreuzungen sind Knoten, Wege dazwischen sind Kanten
• verschiedene Suchstrategien, z.B. im Labyrinth
– einer alleine: erst einen Weg bis zum Ende und dann zurück (Tiefensuche)
– mehrere: ausschwärmen an einer Kreuzung (in die Breite)
Gerüst eines Knotenbesuchsalgorithmus
• gegeben Graph G = (V, E), Menge B von bereits besuchten Knoten
• beginne bei beliebigem Knoten b, B = {b}
• markiere alle Pfeile/Kanten e ∈ E als unbenutzt
• solange es unbenutzten Pfeil/Kante (v, v ′ ) ∈ E mit v ∈ B gibt
– markiere (v, v ′ ) als benutzt
– B = B ∪ {v ′ }
• B enthält alle von b aus erreichbaren Knoten
Letzte Änderung: 23.05.2017 13:41
7
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Verfeinerung des Knotenbesuchsalgorithmus
• zusätzlich Menge R, mit R ⊆ B, von Knoten von denen noch unbenutzte
Pfeile/Kanten ausgehen können
– R heisst Rand von B
• Bedingung zum Abbruch ist wenn R leer
Einfache Zusammenhangskomponenten
• eine der einfachsten Anwendungen des linearen Knotenbesuchsalgorithmus
• suche Zusammenhangskomponenten
Tiefen- und Breitensuche
• wird ein neuer Knoten besucht, so werden seine ausgehenden Pfeile/Kanten in die
Datenstruktur der unbenutzen Kanten eingefügt
– Stapel/Stack (last in first out)
– Schlange/Queue (first in first out)
• was führt zur Tiefensuche, was zu Breitensuche?
Tiefen- und Breitensuche (2)
• Stapel ⇒ Tiefensuche
– depth first search, DFS
• Schlange ⇒ Breitensuche
– breadth first search, BFS
• zu was führt ein rekursiver Knotenbesuchsalgorithmus?
Kürzeste Wege
• bei der Modellierung realer Probleme reicht oft das Vorhandensein oder Fehlen
von Knoten und Kanten nicht aus
• Knoten und Kanten bekommen Eigenschaften zugeordnet, die für die Lösung des
Problems wesentlich sind
Letzte Änderung: 23.05.2017 13:41
8
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
• Beispiele
– Kanalrohre mit maximaler Transportkapazität
– Arbeiten an einem Haus haben minimale, maximale und erwartete Dauer
– Bahnstrecken haben Länge und (je nach Tarif) einen Preis
• Pfeil/Kante werden Kostenwerte zugeordnet, wir interessieren uns für kostengünstigste Wege
– wird in der Regel dann auch kürzester Weg genannt
– um Verluste modellieren zu können, dürfen Pfeile/Kanten auch negative
Länge haben
Definition bewerteter Graph und Kostenfunktion
• ein ungerichteter Graph G = (V, E) mit einer reelwertigen Bewertungsfunktion
c : E → R heißt bewerteter Graph
• für eine Kante e ∈ E heißt c(e) Bewertung (Länge, Gewicht, Kosten)
• die Länge c(G) des Graphen ist die Summe der Längen aller Kanten, also c(G) =
∑
e∈E c(e)
• für einen Weg p = (v0 , v1 , ..., vk ) ist die Länge des Weges c(p) =
∑k−1
i=0
c((vi , vi+1 ))
– für unbewertete Graphen setzen wir c(e) = 1, ∀e ∈ E
Definition Entfernung
• die Entfernung d (Distanz, distance) von einem Konten v zu einem Knoten v ′ ist
definiert als
d(v, v ′ ) = min{c(p)|p ist Weg von v nach v ′ }
falls es überhaupt einen Weg von v nach v ′ gibt
sonst ist d(v, v ′ ) = ∞
• ein Weg p zwischen v und v ′ mit c(p) = d(v, v ′ ) heißt kürzester Weg (shortest
path) zwischen v und v ′
– wird mit sp(v, v ′ ) bezeichnet
Letzte Änderung: 23.05.2017 13:41
9
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Definition Bewerteter Digraph
• ein Digraph G = (V, E) mit Bewertungsfunktion c : E → R heißt bewerteter
Digraph
• wenn er keine Knoten ohne inzidente Pfeile hat (Pfeile die in einem Knoten beginnen oder Enden), heißt er Netzwerk
Definition Distanzgraph
• ist die Länge jeder Kante nicht negativ, also c : E → R+
0 , so heißt G = (V, E) mit
c Distanzgraph
Kürzeste Wege in Distanzgraphen
• Problem: zu einem gegebenen Distanzgraphen und gegebenen Anfangsknoten s
einen kürzesten Weg zu jedem anderen Knoten im Graph finden, Beispiel
Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen
• Idee: Wege in einer Art äquidistanter Welle um den Anfangsknoten solange wachsen lassen, bis Zielknoten erreicht ist
Optimalitätsprinzip
• für jeden kürzesten Weg p = (v0 , v1 , ..., vk ) von v0 nach vk
• ist auch jeder Teilweg p′ = (vi , ..., vj ), 0 ≤ i < j ≤ k ein kürzester Weg von vi nach
vj
• warum?
Letzte Änderung: 23.05.2017 13:41
10
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Kürzeste Wege durch Hinzunahme einzelner Kanten
• länger werdende kürzeste Wege durch Hinzunahme einzelnen Kanten zu bereits
bekannten kürzesten Wegen
• dabei gilt die Invariante
1. Für alle kürzesten Wege sp(s, v) und Kanten (v, v ′ ) gilt:
c(sp(s, v)) + c((v, v ′ )) ≥ c(sp(s, v ′ ))
2. Für wenigstens einen kürzesten Weg sp(s, v) und eine Kante (v, v ′ ) gilt:
c(sp(s, v)) + c((v, v ′ )) = c(sp(s, v ′ ))
Idee zur Realisierung
• jeder Knoten gehört zu einer der Klassen
– gewählte Knoten: kürzester Weg von s ist bereits bekannt
– Randknoten: ein Weg von s bekannt
– unerreichte Knoten: kein Weg von s bekannt
Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen
Idee zur Realisierung (2)
• wir merken uns zu jedem Knoten v
– die bisher berechnete, vorläufige Entfernung zum Anfangsknoten s,
– den Vorgänger von v auf dem bisher berechneten, vorläufig kürzesten Weg
von s nach v und
Letzte Änderung: 23.05.2017 13:41
11
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
– eine Markierung, ob der Knoten bereits gewählt ist
• außerdem speichern wir die Menge R der Randknoten
Dijkstras Algorithmus
zur Berechnung kürzester Wege von einem Knoten zu allen anderen (1959, Buch S. 622f)
• Initialisierung
– setze s gewählt, Entfernung zu s = 0, Vorgänger = 0
– für alle anderen Knoten setze nicht gewählt, Entfernung zu s = ∞, Vorgänger
undefiniert
– alle zu s adjazenten Knoten gehören zum Rand R
• berechne Wege ab s
solange R ̸= ∅ wiederhole
– wähle v ∈ R mit minimaler Entfernung zu s und entferne v aus R
– setze v gewählt
– ergänze Rand R bei v
* nehme alle unerreichten Knoten mit zu R
* passe möglicherweise kürzer gewordene Entfernungen an
Aufgabe
Berechnen Sie die kürzesten Wege vom Knoten a nach Dijkstras Algorithmus:
Letzte Änderung: 23.05.2017 13:41
12
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Distanzgraph
Kürzeste Wege in beliebig bewerteten Graphen
• wenn wir auch negative Kantenbewertungen zulassen, ändert sich die Berechnung
kürzester Wege erheblich
– ein Weg wird kürzer(!) wenn eine Kante mit einer negativen Länge dazu
genommen wird!
– d.h. wenn man zuläßt das negative Zyklen enthalten sein dürfen, wird der
Weg immer kürzer
• Zusatzbedingung: kürzeste Wege dürfen keine Zyklen enthalten
Auswahlverfahren von Ford
kürzeste Wege in G = (V, E) mit c : E → R von einem Knoten s ∈ V .
1. Initialisierung
1. setze für alle Knoten v ∈ V \{s} Vorgänger auf undefiniert und Entfernung
auf ∞.
2. setze für s Vorgänger auf s und Entfernung auf 0
3. alle zu s adjazenten Knoten gehören zu R
2. Berechne Wege ab s
Solange R ̸= ∅
Letzte Änderung: 23.05.2017 13:41
13
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
• wähle v ∈ R und entferne v aus R
• verschiebe R bei v
Rand verschieben bei v
• Für alle (v, v ′ ) ∈ E wird überprüft
v.Entf ernung + c((v, v ′ )) < v ′ .Entf ernung
• wenn das gilt, ist v ′ (kürzer) über v erreichbar
– setze Vorgänger von v ′ auf v und Entfernung entsprechend
– füge v ′ zum Rand hinzu, falls noch nicht enthalten
Aufgabe
Berechnen Sie die kürzesten Wege vom Knoten a nach dem Auswahlverfahren nach Ford:
Distanzgraph
Minimal spannende Bäume
• ein minimaler spannender Baum (minimal spanning tree, MST)
– eines Graphen G
– ist ein spannender Baum von G von
Letzte Änderung: 23.05.2017 13:41
14
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
– minimaler Gesamtlänge unter allen spannenden Bäumen von G
• Ziel: aus einer Vielzahl von Kanten nur diese auszuwählen,
– die die Knoten mit kürzester Gesamtlänge verbinden
• notwendige Voraussetzung
– zusammenhängender, ungerichteter Graph
Verfahren zur Lösung
• gieriges (greedy) Verfahren
– Entscheidungen, die den Rechnenprozess der Lösung näher bringt
* auf Basis der bis dahin gesammelten Informationen
* werden nicht mehr revidiert
– vergleichsweise effizient
Algorithmus-Gerüst
• berechne
– zu zusammenhängenden, ungerichteten, bewerteten Graphen G = (V, E)
– mit c : E → R
– einen minimalen spannenden Baum T ′ = (V, E ′ ) von G
• setze E ′ = ∅
• solange noch nicht fertig
– wähle geeignete Kante und füge diese zu E ′ hinzu
Auswahlverfahren für die Kanten
• alle Kanten sind entweder gewählt, verworfen oder unentschieden
• zu Beginn alle Kanten unentschieden
• am Ende des Auswahlverfahrens bilden die gewählten einen minimalen spannenden
Baum
• Auswahlinvariante
– es gibt einen MST der alle gewählten und keine verworfenen Kanten enthält
• im Laufe der Jahre verschiedene effiziente Algorithmen vorgeschlagen
Letzte Änderung: 23.05.2017 13:41
15
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Definition Schnitt
• ein Schnitt in einem Graphen G = (V, E)
• ist eine Zerlegung von V in S und S = V − S
• eine Kante kreuzt einen Schnitt, wenn sie mit einem Knoten aus S und einem
Knoten aus S inzident ist
Entscheidungsregeln
• die folgenden Regeln entscheiden darüber ob eine unentschiedene Kante gewählt
oder verworfen wird
Regel 1 (Wähle eine Kante) Wähle einen Schnitt, den keine gewählte Kante kreuzt.
Wähle eine kürzeste unter den unentschiedenen Kanten, die den Schnitt kreuzen.
Regel 2 (Verwirf eine Kante) Wähle einen einfachen Zyklus, der keine verworfenen
Kanten enthält. Verwirf eine längste unter den unentschiedenen Kanten im Zyklus.
• die verschiedenen Algorithmen unterscheiden sich zum einen
– in der Reihenfolge in der die beiden Regeln angewandt werden
und zum anderen
– in der Art, wie ein Schnitt oder ein Zyklus gewählt werden
Algorithmus von Boruvka
• ältester Algorithmus
• für G = (V, E) ist am Anfang jeder einzelne Knoten ein gewählter Baum
• in einem Auswahlschritt wird für jeden gewählten Baum eine kürzeste Kante zu
einem anderen Baum gewählt
– gibt es zu einem Baum mehr als eine kürzeste Kante, wird diejenige gewählt,
die mit einem Knoten kleinster Nummer indiziert
– dadurch wird vermieden, dass durch ungeschickte Wahl ein Zyklus entsteht
Algorithmus von Kruskal
• für G = (V, E) ist am Anfang jeder einzelne Knoten ein gewählter Baum
• dann wird für jede Kante e ∈ E in aufsteigender Kantenlänge folgender
Auswahlschritt angewandt:
– falls e beide Endknoten im selben gewählten Baum hat, verwirf e
– sonst, wähle e
Letzte Änderung: 23.05.2017 13:41
16
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Algorithmus von Jarník, Prim, Dijkstra
• ähnlich Dijkstras kürzeste Wege Algorithmus
• zu jedem Zeitpunkt bilden die gewählten Kanten einen gewählten Baum
• wir beginnen mit einem beliebigen Anfangsknoten s ∈ V und führen folgenden
Auswahlschritt (|V | − 1)-mal aus:
– wähle eine Kante mit minimaler Länge zu der genau ein Endknoten zum
gewählten Baum gehört
Aufgabe
Berechnen Sie den MST nach den drei verschiedenen Algorithmen:
Distanzgraph
Flüsse in Netzwerken
Flüsse in Netzwerken
• Wieviele Fahrzeuge pro Minute kann ich höchstens durch eine Stadt leiten?
• Welche Wassermenge verkraftet die Kanalisation?
Letzte Änderung: 23.05.2017 13:41
17
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Flüsse in Netzwerken (2)
• sei G = (V, E) ein gerichteter Graph
– mit einer Kapazitätsfunktion c : E → R+
– und zwei ausgezeichneten Knoten, einer Quelle q und einer Senke s
• Ziel: maximaler Fluß von q nach s
Fluss
• ein Fluss durch einen Pfeil muss die Kapazitätsbeschränkung dieses Pfeils einhalten
• an jedem Knoten muss der Fluß erhalten bleiben, also gleich viel hinein- und
hinausfließen (außer an q und s)
• ein Fluss ist eine Funktion f : E → R+
0 , wobei gilt:
– Kapazitätsbeschränkung: Für alle e ∈ E ist f (e) ≤ c(e)
– Flusserhaltung: für alle v ∈ V − {q, s} ist
∑
(v ′ ,v)∈E
f ((v ′ , v)) −
∑
(v,v ′′ )∈E
f ((v, v ′′ )) = 0
Beispiel
• an jedem Pfeil ist c(e)/f (e) angegeben
• der Wert w(f ) eines Flusses f ist die Summe der Flußwerte aller q verlassenden
Pfeile, also im Beispiel w(f ) = 3
Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen
Letzte Änderung: 23.05.2017 13:41
18
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Algorithmen zur Berechnung des maximalen Flusses
• es kann nicht mehr fließen wie unmittelbar aus q heraus und in s hinein
• genauso begrenzt jeder Schnitt durch den Graphen der q und s teilt
• ein (q von s trennender) Schnitt ist
– eine Zerlegung der Knotenmenge V in zwei Teilmengen Q und S, so dass
q ∈ Q und s ∈ S
• die Kapazität c(Q, S) eines Schnittes Q, S ist die Summe der Kapazitäten der
Pfeile die von Q nach S führen
• ein Schnitt mit kleinster Kapazität unter allen möglichen Schnitten heißt minimaler Schnitt
• für jeden Fluss f und jeden Schnitt Q, S gilt: f (Q, S) = w(f )
• der Fluß über einen beliebigen Schnitt kann dessen Kapazität nicht überschreiten
Maximaler Fluss durch zunehmende Wege
• Fluss erhöhen, durch Hinzunahme eines Weges
Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen
• Fluss ist aber nur 8, obwohl Kapazität des minimalen Schnitts {q, a, b}, {c, d, s} 10
beträgt
• durch schrittweises Abändern der Flüsse maximieren
Abändern von Flüssen
• Ausdrücken in Wegen von q nach s
Letzte Änderung: 23.05.2017 13:41
19
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
– Erhöhen eines Flusses entlang eines Pfeiles mit noch freier Restkapazität
rest(e) = c(e) − f (e)
– Verringern eines Flusses entlang eines Pfeiles, bzw. Erhöhen in Gegenrichtung
• Weg ohne Rücksicht auf die Pfeilrichtung wird zunehmender Weg genannt
– in Pfeilrichtung gilt f (e) > c(e), also rest(e) > 0
– entgegen gilt f (e) > 0
Restgraph
• der Restgraph beschreibt die Flussvergrößerungsmöglichkeiten
– er enthält einen Pfeil e, wenn rest(e) > 0
– er enthält den zu e entgegengesetzten Pfeil, wenn f (e) > 0
• Beispiel für den letzten Fluss
Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen
Suche des zunehmenden Weges
• der einzige zunehmende Weg in dem Beispiel, ist der einzige einfache Weg im
Restgraphen von q nach s:
– q, b, a, c, d, s
– Flussvergrößerung um 2 auf diesem Weg
– anschließend kein Weg mehr von q nach s im zugehörigen Restgraphen
Letzte Änderung: 23.05.2017 13:41
20
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Maximaler Fluss
• Ein Fluss f ist genau dann maximal,
• wenn es für f keinen zunehmenden Weg mehr gibt.
• Der Wert des Flusses entspricht dann der Kapazität eines minimalen Schnitts.
Algorithmus: Beliebig zunehmende Wege
• Initialisiere mit Nullfluss
– ∀e ∈ E : f (e) := 0
• solange es einen zunehmenden Weg p gibt:
– wähle r := min{rest(e)|e liegt auf Weg p im Restgraphen}
– erhöhe f entlang p um r
Kürzeste zunehmende Wege
• die Laufzeit kann durch weitere Bedingung eingeschränkt werden
• hängt nur von der Größe des Graphen ab
• wähle aus allen zunehmenden Wegen immer einen mit möglichst wenigen Pfeilen
Alle kürzesten zunehmenden Wegen
• zur Bestimmung eines kürzesten zunehmenden Weges von q nach s sind nicht alle
Pfeile im Restgraphen von Interesse
Letzte Änderung: 23.05.2017 13:41
21
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
• es genügt für jeden von q aus erreichbaren Knoten v im Restgraph einen kürzesten
Weg von q nach v zu kennen
• die Länge (Anzahl der Pfeile) eines kürzesten Weges von q nach v heisst dann
Niveau von v
Beispiel: Fluss- und Restgraph
Niveaugraph
• der Niveaugraph enthält nur
– die von q aus erreichbaren Knoten
– Pfeile die auf einem kürzesten Weg liegen
• mit einer Breitensuche kann der Niveaugraph in Zeit O(|E|) konstruiert werden
• Beispiel
Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen
Letzte Änderung: 23.05.2017 13:41
22
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Abänderung Algorithmus
• der zweite Schritt zur iterierten Flussvergrößerung im Algorithmus Maximaler
Fluss durch zunehmende Wege kann ersetzt werden durch:
• solange s zum Niveaugraphen für f gehört
– setze fb := ein blockierender Fluss im Niveaugraphen für f
– setze f := f ⊕ fb
• ein Fluss der einen gesätigten (nicht mehr vergrößerbaren) Pfeil enthält, heisst
blockierender Fluss
• die Operation ⊕ bezeichnet das bereits erläuterte Addieren zweier Flüsse unter
Berücksichtigung der Pfeilrichtung
Zuordnungsprobleme
Zuordnungsprobleme
• Zuordnungsprobleme bei denen es um eine insgesamt bestmögliche Bildung von
Paaren geht
• die Elemente der Grundmenge sind die Knoten
• alle möglichen Paarbildungen beschreiben die Kanten
• Beispiel
– Knotenmenge: alle Teilnehmer einer Gruppenreise
– Kanten: Bereitschaft der beiden Teilnehmer in einem Doppelzimmer zu übernachten
– Fragestellung: Wieviele Doppelzimmer werden insgesamt benötigt?
– d.h. größtmögliche Kantenmenge, so dass jeder Knoten mit höchstens einer
Kante inzidiert
Zuordnungsproblem formalisiert
• für einen ungerichteten Graphen G = (V, E) ist eine Zuordnung Z (matching)
– eine Teilmenge der Kanten von G
– so dass keine zwei Kanten in Z den selben Endknoten haben
• die Anzahl |Z| von Kanten in Z heisst Größe der Zuordnung
Letzte Änderung: 23.05.2017 13:41
23
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
• ein Knoten ist bezüglich einer Zuordnung Z alleine (unmatched), wenn er nicht
Endknoten einer Kante in Z ist
• Z ist eine perfekte Zuordnung (perfect matching), wenn mit Z kein Knoten
alleine bleibt
Maximale Zuordnung
• in folgendem Graphen gibt es mehrere perfekte Zuordnungen
Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen
• da es nicht immer eine perfekte Zuordnungen geben muss, definiert man eine Zuordnung Z als nicht erweiterbar (maximal), wenn es keine Kante e ∈ E gibt, die
man noch hinzu nehmen könnte, z.B. {(Adam, Eva), (Dick, Doof )}
• eine Zuordnung mit maximaler Größe |Z| heisst maximale Zuordnung (maximum matching)
Zuordnung mit maximaler Zufriedenheit
• ordnet man den Kanten noch Werte zu, die die jeweilige Zufriedenheit mit dem
Partner ausdrücken, kann nach einer Zuordnung gesucht werden, die die Summe
der Zufriedenheiten maximiert
Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen
Letzte Änderung: 23.05.2017 13:41
24
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
• anderes Anwendungsbeispiel
– Mitarbeiter sind verschieden gut geeignet für verschiedene Tätigkeiten, ausgedrückt durch das Kantengewicht
– Tätigkeiten sollen so Mitarbeitern zugeordnet werden, dass die Summe der
Kantengewicht maximal wird
Maximale gewichtete Zuordnung
• ungerichteter, bewerteter Graph G = (V, E)
• mit Kantenbewertung w : E → R
• dann ist Gewicht einer Zuordnung Z die Summe der Gewichte der Kanten in Z
• wir suchen eine maximale gewichtetet Zuordnung (maximal weight matching)
Bipartiter Graph
• ein Graph G = (V, E) heisst bipartit (bipartite), wenn sich die Knotenmenge so
– in zwei Teilmengen X und Y zerlegen lässt, also
V = X ∪ Y und X ∩ Y = ∅
– das gilt E ⊆ X × Y , also keine Kante zwei Knoten in X oder zwei Knoten in
Y verbindet
Beispiel
• Graph G mit X = {x1 , ..., x6 } und Y = {y1, ..., y6 }
Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen
• Zuordnung {(x1 , y2), (x2 , y4 ), (x4 , y5 ), (x5 , y6 )} ist nicht maximal
• besser z.B. statt der Kante (x1 , y2 ) die beiden Kanten (x1 , y1 ) und (x3 , y2 )
Letzte Änderung: 23.05.2017 13:41
25
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Fortsetzung Beispiel
• es müssen also zum Maximieren u.U. Kanten aus einer Zuordnung wieder herausgenommen werden
Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen
• manchmal reicht es nicht eine Kante herauszunehmen, z.B. bei (x2 , y4 ) und (x4 , y5 )
• erinnert an das Konzept der zunehmenden Flüsse
Zuordnungsproblem in bipartiten Graphen
• Zuordnungsproblem in bipartiten Graphen kann als Flussproblem formuliert werden
• wir erweitern V mit zwei Knoten q und s zu V ′
• wir ändern E zu E ′
– jede Kante (xi , yj ) mit xi ∈ X, yj ∈ Y wird zu einem Pfeil von xi nach yj
– es gibt für jeden Knoten xi ∈ X einen Pfeil (q, xi )
– es gibt für jeden Knoten yj ∈ Y einen Pfeil (yj , s)
• der Graph G′ = (V ′ , E ′ ) ist ein Flussgraph
Beispiel als Flussgraph
• als Kapazitätsfunktion wählen wir c : E ′ → {1}
• jede Zuordnung entspricht einem Fluss und umgekehrt
Letzte Änderung: 23.05.2017 13:41
26
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen
Zunehmende Wege
• Ersetzen der Kante (x1 , y2 ) durch die beiden Kanten (x1 , y1 ) und (x3 , y2 ) entspricht
dem zunehmenden Weg q, x3 , y2 , x1 , y1 , s
Letzte Änderung: 23.05.2017 13:41
27
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen
Zurück zu G
• wir können das Konzept der zunehmenden Flüsse in folgendes Konzept für G übertragen:
• auf einem zunehmenden Weg transportiert
– ein Vorwärtspfeil e den aktuellen Fluss f (e) = 0
– ein Rückwärtspfeil e′ den aktuellen Fluss f (e′ ) = 1
• einem zunehmenden Weg q, xi , ..., yj , s in G′
– entspricht ein ein Weg xi , ..., yj in G
• Zahl der Vorwärtspfeile ist stets um 1 größer als Zahl der Rückwärtspfeile
• Weg in G ist Weg in dem abwechselnd Kanten zur Zuordnung gehören bzw. nicht
zur Zuordnung gehören
Alternierender Weg
• für eine gegebenen Zuordnung Z nennen wir
– die für Z verwendeten Kanten e ∈ Z heissen gebunden
– die Kanten e′ ∈ E \ Z heissen frei
Letzte Änderung: 23.05.2017 13:41
28
Algorithmen und Datenstrukturen II: Graphenalgorithmen
Prof. Dr. Oliver Braun
• jeder Knoten
– der mit einer gebundenen Kante inzidiert ist, heisst gebundener Knoten
– jeder andere Knoten ist frei
• ein Weg in G dessen Kanten abwechselnd gebunden und frei sind, heisst
alternierender Weg
• die Länge des alternierenden Wegs ist die Anzahl seiner Kanten
Vergrößernder alternierender Weg
• ein alternierender Weg kann nur dann zur Vergrößerung der Zuordnung benützt
werden, wenn
– die beiden Knoten an den Enden frei sind
• der alternierende Weg heisst dann vergrößernd
• Beweis, dass man mit vergrößernden Wegen schließlich auch wirklich eine maximale
Zuordnung erreicht, steht in Ottmann & Widmayer S. 653ff
Letzte Änderung: 23.05.2017 13:41
29
Herunterladen