96
DBS Kapitel 5: Graphen Graph-Repräsentationen Kürzeste Wege Minimale Spannbäume Flussnetzwerke Prof. Dr. Thomas Seidl

Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

DBS

Kapitel 5: Graphen

Graph-RepräsentationenKürzeste Wege

Minimale SpannbäumeFlussnetzwerke

Prof. Dr. Thomas Seidl

Page 2: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Motivation zu Graphen

• Viele reale Fragestellungen lassen sich durch Graphen darstellen

Algorithmen und Datenstrukturen - Kapitel 5 2

Page 3: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Motivation zu Graphen

• Bezogen auf einen Graphen ergeben sich Fragen:– Existiert eine Verbindung zwischen A und B? – Existiert eine zweite Verbindung, falls die erste blockiert ist?– Wie lautet die kürzeste Verbindung von A nach B?– Wie sieht ein minimaler Spannbaum zu einem Graphen aus?– Wie plane ich eine optimale Rundreise? (Traveling Salesman

Problem)

Algorithmen und Datenstrukturen - Kapitel 5 3

Page 4: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Gerichteter Graph

Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar𝐺𝐺 = (𝑉𝑉,𝐸𝐸) mit einer endlichen, nichtleeren Menge 𝑉𝑉, deren ElementeKnoten (nodes, vertices) heißen, und einer Menge 𝐸𝐸 ⊆ 𝑉𝑉 × 𝑉𝑉, derenElemente Kanten (edges, arcs) heißen.

Bemerkungen:

• |𝑉𝑉| = Knotenanzahl

• 𝐸𝐸 ≤ 𝑉𝑉 2 = Kantenanzahl• Meist werden die Knoten durchnummeriert: 𝑖𝑖 = 0, 1, 2, … , |𝑉𝑉| − 1

Algorithmen und Datenstrukturen - Kapitel 5 4

Page 5: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Gerichteter Graph

Graphische Darstellung einer Kante von 𝑣𝑣 nach 𝑤𝑤:

Begriffe:• 𝑣𝑣 ist Vorgänger von 𝑤𝑤• 𝑤𝑤 ist Nachfolger von 𝑣𝑣• 𝑣𝑣 und 𝑤𝑤 sind Nachbarn bzw. adjazent

Algorithmen und Datenstrukturen - Kapitel 5 5

𝑣𝑣 𝑤𝑤

Page 6: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

0 1 2

3 4

Gerichteter Graph: Beispiel

• 𝑉𝑉 = 0,1,2,3,4• 𝐸𝐸 = 0,1 , 0,3 , 1,0 , 1,3 , 2,2 , 2,4 , 3,4 , 4,2

Algorithmen und Datenstrukturen - Kapitel 5 6

Page 7: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Gerichteter Graph: Definitionen

• Grad eines Knotens := Anzahl der ein- und ausgehenden Kanten

• Ein Pfad ist eine Folge von Knoten 𝑣𝑣0, … , 𝑣𝑣𝑛𝑛−1mit 𝑣𝑣𝑖𝑖 ,𝑣𝑣𝑖𝑖+1 ∈ 𝐸𝐸 für 0 ≤ 𝑖𝑖 ≤ 𝑛𝑛 − 1, also eine Folge „zusammenhängender“ Kanten.

• Länge eines Pfades := Anzahl der Kanten auf dem Pfad

• Ein Pfad heißt einfach, wenn alle Knoten auf dem Pfad paarweise verschieden sind.

• Ein Zyklus ist ein Pfad mit 𝑣𝑣0 = 𝑣𝑣𝑛𝑛−1 und Länge 𝑛𝑛 ≥ 2.

• Ein Teilgraph 𝐺𝐺′ = (𝑉𝑉′,𝐸𝐸′) eines Graphen 𝐺𝐺 = (𝑉𝑉,𝐸𝐸) ist ein Graph mit 𝑉𝑉′ ⊆ 𝑉𝑉 und 𝐸𝐸′ ⊆ 𝐸𝐸 ∩ 𝑉𝑉′ × 𝑉𝑉′ .

Algorithmen und Datenstrukturen - Kapitel 5 7

Page 8: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Gerichteter Graph: Markierungen

• Man kann Markierungen oder Beschriftungen für Kanten und Knoten einführen.

• Häufig verwendet: Kostenfunktionen für Kanten

• Notation:– 𝑐𝑐[𝑣𝑣,𝑤𝑤] oder 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐(𝑣𝑣,𝑤𝑤), 𝑐𝑐(𝑣𝑣,𝑤𝑤)

• Bedeutung: – Entfernung zwischen 𝑣𝑣 und 𝑤𝑤– Reisezeit– Reisekosten– …

Algorithmen und Datenstrukturen - Kapitel 5 8

Page 9: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Ungerichteter Graph

Ein ungerichteter Graph ist ein gerichteter Graph, in dem die Relation𝐸𝐸 symmetrisch ist:

𝑣𝑣,𝑤𝑤 ∈ 𝐸𝐸 ⇒ 𝑤𝑤, 𝑣𝑣 ∈ 𝐸𝐸

Graphische Darstellung (ohne Pfeil):

Bemerkung:Die eingeführten Begriffe (Grad eines Knoten, Pfad, ...) verstehen sich analog zu denen für gerichtete Graphen. Bisweilen sind Modifikationen erforderlich, z.B. muss ein Zyklus hier mindestens drei Knoten haben.

Algorithmen und Datenstrukturen - Kapitel 5 9

𝑣𝑣 𝑤𝑤

Page 10: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Graph-Darstellungen

• Man kann je nach Zielsetzung den Graphen knoten- oder kanten-orientiert abspeichern.

• Die knotenorientierte Darstellungsform ist gebräuchlicher und existiert in vielen verschiedenen Variationen.

Die Adjazenzmatrix 𝐴𝐴 ist eine boolesche Matrix mit:

𝐴𝐴𝑖𝑖𝑖𝑖 = � 𝑐𝑐𝑟𝑟𝑟𝑟𝑟𝑟 falls 𝑣𝑣𝑖𝑖 ,𝑣𝑣𝑖𝑖 ∈ 𝐸𝐸𝑓𝑓𝑓𝑓𝑓𝑓𝑐𝑐𝑟𝑟 sonst

Eine solche Matrix [𝐴𝐴𝑖𝑖𝑖𝑖] lässt sich als Array 𝐴𝐴 𝑖𝑖][𝑗𝑗 darstellen.

Algorithmen und Datenstrukturen - Kapitel 5 10

Page 11: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Boolesche Adjazenzmatrix - Beispiel

Für den Beispiel-Graph 𝐺𝐺1 ergibt sich folgende Adjazenzmatrix mit der Konvention true = 1, false = 0:

Algorithmen und Datenstrukturen - Kapitel 5 11

0 1 2 3 40 0 1 0 1 0

1 1 0 0 1 0

2 0 0 1 0 1

3 0 0 0 0 1

4 0 0 1 0 0

nach

von

0 1 2

3 4

Page 12: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Adjazenzmatrix

• Vorteile– Entscheidung, ob 𝑖𝑖, 𝑗𝑗 ∈ 𝐸𝐸 in Zeit 𝑂𝑂 1

• Nachteile– Platzbedarf stets 𝑂𝑂 𝑉𝑉 2 , ineffizient falls 𝐸𝐸 ≪ 𝑉𝑉 2

– Initialisierung benötigt Zeit 𝑂𝑂 𝑉𝑉 2

• Kantenbeschriftung– statt booleschen Werten Zusatzinformation (bspw. Integer) als

Matrixeinträge speichern– Bsp: Kosten; Weglängen– Definition Kostenadjazenzmatrix:

mit 𝑐𝑐 𝑣𝑣𝑖𝑖 , 𝑣𝑣𝑖𝑖 Kosten für die Kante zwischen 𝑣𝑣𝑖𝑖 und 𝑣𝑣𝑗𝑗

• Achtung: Bei boolescher Adjazenzmatrix bedeutet 𝐴𝐴 𝑖𝑖, 𝑗𝑗 = 0, dass keine Kante besteht; bei Kostenadjazenzmatrix, dass die Kosten 𝑐𝑐(𝑣𝑣𝑖𝑖 , 𝑣𝑣𝑖𝑖) = 0 sind.

Algorithmen und Datenstrukturen - Kapitel 5 12

∞∈

=sonst

EvvvvcA jiji

ij

),(),(

Page 13: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Adjazenzliste

• Für jeden Knoten wird eine Liste der Nachbarknoten angelegt.

• Für G1 ergibt sich folgende Adjazenzliste:

Algorithmen und Datenstrukturen - Kapitel 5 13

1 3

0

2

4

2

3

4

0

1

2

3

4

0 1 2

3 4

Page 14: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Adjazenzliste

• Vorteile– geringer Platzbedarf von 𝑂𝑂 𝑉𝑉 + 𝐸𝐸– Initialisierung in Zeit 𝑂𝑂 𝑉𝑉 + 𝐸𝐸

• Nachteile

– Entscheidung, ob 𝑖𝑖, 𝑗𝑗 ∈ 𝐸𝐸 in Zeit 𝑂𝑂 𝐸𝐸𝑉𝑉

im Average Case

• Kantenbeschriftung– als Zusatzinformation bei Listenelementen

Algorithmen und Datenstrukturen - Kapitel 5 14

Page 15: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Mischform

• Verwende zwei eindimensionale Arrays from und to mit Referenzen auf Kantenobjekte.

• Es gibt einen Referenzenpfad zu einem Objekt von from[i] und to[j]genau dann wenn der repräsentierte Graph 𝐺𝐺 eine Kante von Knoten 𝑣𝑣𝑖𝑖 zu Knoten 𝑣𝑣𝑖𝑖 enthält.

Algorithmen und Datenstrukturen - Kapitel 5 15

0

1

2

3

4

0 1 2 3 4

von

nach

0 1 2

3 4

Page 16: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Mischform

Vorteil:• geringer Platzbedarf von 𝑂𝑂 𝑉𝑉 + 𝐸𝐸 (wie Adjazenzlisten)

• Initialisierung in Zeit 𝑂𝑂 𝑉𝑉 + 𝐸𝐸 (wie Adjazenzlisten)

• auch Vorgängerliste leicht erhältlich (wie Adjazenzmatrix)

Nachteil:

• Entscheidung, ob Kante (𝑖𝑖, 𝑗𝑗) ∈ 𝐸𝐸 in Zeit 𝑂𝑂 𝐸𝐸𝑉𝑉

im Average Case

(wie Adjazenlisten)

Algorithmen und Datenstrukturen - Kapitel 5 16

Page 17: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Expansion eines Graphen

Die Expansion 𝑋𝑋𝐺𝐺(𝑣𝑣) eines Graphen 𝐺𝐺 in einem Knoten 𝑣𝑣 ist ein Baum,der wie folgt definiert ist:

• Falls 𝑣𝑣 keine Nachfolger hat, ist 𝑋𝑋𝐺𝐺(𝑣𝑣) nur der Knoten 𝑣𝑣.

• Falls 𝑣𝑣1, … , 𝑣𝑣𝑘𝑘 die Nachfolger von 𝑣𝑣 sind, ist 𝑋𝑋𝐺𝐺(𝑣𝑣) der Baum mit der Wurzel 𝑣𝑣 und den Teilbäumen 𝑋𝑋𝐺𝐺 𝑣𝑣1 , … ,𝑋𝑋𝐺𝐺 𝑣𝑣𝑘𝑘 .

Algorithmen und Datenstrukturen - Kapitel 5 17

Page 18: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Expansion eines Graphen: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 18

0 1 2

3 4Beispielgraph 𝐺𝐺1 in seiner Expansion 𝑋𝑋𝐺𝐺 𝑣𝑣 mit 𝑣𝑣 = 0

1...

0

1

0 3

3

4

2

4

2

2

42

4

2

42

3

4

2

1

3

43

0

... ......

......

......

...

Page 19: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Expansion eines Graphen: Anmerkungen

• Die Knoten des Graphen können mehrfach im Baum vorkommen.

• Ein Baum ist unendlich, falls der Graph Zyklen hat.

• Der Baum 𝑋𝑋𝐺𝐺 𝑣𝑣 stellt die Menge aller Pfade dar, die von 𝑣𝑣ausgehen.

Algorithmen und Datenstrukturen - Kapitel 5 19

Page 20: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Graph-Durchlauf

Entspricht Baum-Durchlauf durch Expansion (ggf. mit Abschneiden)

• Tiefendurchlauf: preorder traversal (depth first)

• Breitendurchlauf: level order traversal

Wichtige Modifikation:

1. Schon besuchte Knoten müssen markiert werden, weil Graph-knoten im Durchlauf mehrfach vorkommen können. (Zyklen!)

2. Abbruch des Durchlaufs bei schon besuchten Knoten.

Algorithmen und Datenstrukturen - Kapitel 5 20

Page 21: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Graph-Durchlauf: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 21

𝐺𝐺1 mit Startknoten: 𝑣𝑣 = 0

0

1 3

4

2

1

23

4

5

Tiefendurchlauf: Breitendurchlauf:0

3

4

2

1

2

3

4

5

1

0 1 2

3 4

Page 22: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Ansatz für Graph-Durchlauf

1. Initialisierung: markiere alle Knoten als „not visited“

2. Abarbeiten der Knotenif (node „not visited“) then

– bearbeite– markiere: „visited“– weitergehen zu Nachfolger

Für die Markierung „visited“ reicht der Typ boolean. Für andere Berechnungen auf Graphen benötigt man aber auch mehr als die zwei Werte „true“ and „false“.

Algorithmen und Datenstrukturen - Kapitel 5 22

Page 23: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Markierungen beim Durchlauf

Während des Graph-Durchlaufs werden folgende Markierungen für die Graph-Knoten verwendet:

• Ungesehene Knoten (unseen vertices):Knoten, die noch nicht erreicht worden sind: 𝑣𝑣𝑓𝑓𝑓𝑓[𝑣𝑣] = 0

• Baum-Knoten (tree vertices):Knoten, die schon besucht und abgearbeitet sind. Diese Knoten ergeben die Expansion: 𝑣𝑣𝑓𝑓𝑓𝑓[𝑣𝑣] = 𝑖𝑖𝑖𝑖 > 0

• Rand-Knoten (fringe vertices), aktive Knoten:Knoten, die über eine Kante mit einem Baum-Knoten verbunden sind: 𝑣𝑣𝑓𝑓𝑓𝑓[𝑣𝑣] = −1

Algorithmen und Datenstrukturen - Kapitel 5 23

Page 24: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Beliebiges Auswahlkriterium

• Start: Markiere den Startknoten als Rand-Knoten und alle anderen Knoten als ungesehene Knoten.

• Schleife: repeat

– Wähle einen Rand-Knoten x mittels eines Auswahlkriteriums (depth first, breadth first, priority first).

– Dazu: Priority Queue, – Markiere x als Baum-Knoten und bearbeite x.– Markiere alle ungesehenen Nachbar-Knoten von x als Rand-

Knoten.

… until (alle Knoten abgearbeitet)

Algorithmen und Datenstrukturen - Kapitel 5 24

Page 25: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Topologisches Sortieren

• Abhängigkeiten zwischen Aktionen („erst x, dann y“)• Gesucht: Lineare Ordnung der Knoten, sodass für alle 𝑟𝑟, 𝑣𝑣 ∈ 𝐸𝐸 der

Knoten 𝑟𝑟 „vor“ 𝑣𝑣 liegt. → Abarbeitungsfolge/-plan der Aktionen

• formal: Einbettung einer Halbordnung/partiellen Ordnung (reflexiv, transitiv, antisymmetrisch) in eine lineare/totale Ordnung

Algorithmen und Datenstrukturen - Kapitel 5 25

Socken

Schuhe

Hemd

Uhr

Unterhose

Hose

Gürtel Krawatte

Jacke

Page 26: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Topologisches Sortieren und DAGs

• topologische Sortierung genau dann möglich, wenn Graph keine Zyklen enthält– anschaulich: alle Kanten „zeigen nach rechts“

• DAG: directed acyclic graph / gerichteter Graph ohne Zyklen• topologische Sortierung im Allgemeinen nicht eindeutig

Algorithmen und Datenstrukturen - Kapitel 5 26

Socken Schuhe Hemd UhrUnterhose Hose Gürtel Krawatte Jacke

Socken SchuheHemd UhrUnterhose Hose Gürtel Krawatte Jacke

Page 27: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Idee zum Algorithmus

• Nutze Informationen über Anzahl der Vorgänger eines Knotens– Knoten ohne Vorgänger können direkt abgearbeitet werden– Falls Knoten abgearbeitet wurde, verringert sich für alle seine

Nachfolger die Anzahl deren Vorgänger um 1– falls für einen Knoten die Vorgängeranzahl 0 erreicht, kann

auch dieser ausgegeben werden• alle seine Vorgängerknoten wurden bereits abgearbeitet

• Bemerkung: Es existiert ein alternativer Algorithmus, der auf der Tiefensuche basiert.

Algorithmen und Datenstrukturen - Kapitel 5 27

Page 28: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Algorithmus zum topologischen Sortieren

TopoSort(DAG G){S = { } // Menge der abgearbeiteten Knotenfor (i=0,i<n, i++) {P[i] = Anzahl Vorgänger des Knotens i

}while V\S ≠ { } {

wähle w ∈ V \ S mit P[i]==0;gebe w aus;S = S ∪ {w};für jeden Nachfolger v von w {P[v]--;}

}}

Algorithmen und Datenstrukturen - Kapitel 5 28

Page 29: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Kürzeste Wege

• Problemstellung: Suche kürzesten Weg1. Von einem Knoten zu allen anderen:

„Single Source Shortest Path“2. Von allen Knoten zu einem Ziel:

„Single Destination Shortest Path“3. Von allen Knoten zu allen anderen:

„All Pairs Shortest Path“• Gegeben: Gerichteter Graph 𝐺𝐺 mit Kostenfunktion

(=Adjazenzmatrix)

𝑐𝑐 𝑣𝑣,𝑤𝑤 �≥ 0 , falls eine Kante von 𝑣𝑣 nach 𝑤𝑤 existiert= ∞ , falls keine Kante von 𝑣𝑣 nach 𝑤𝑤 existiert= 0 , für 𝑤𝑤 = 𝑣𝑣

Startknoten 𝑣𝑣0, Endknoten 𝑤𝑤• Gesucht: Pfad von 𝑣𝑣0 zu jedem Knoten 𝑤𝑤 mit minimalen

Gesamtkosten

Algorithmen und Datenstrukturen - Kapitel 5 29

Page 30: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Eigenschaften von Pfaden

• Pfadkosten können durch Erweiterung eines Pfades nur wachsen, da Kantengewichte stets positiv sind.

• Falls beste Pfade von 𝑣𝑣0 zu allen anderen Knoten 𝑉𝑉 − 𝑣𝑣0 höhere Kosten haben, ist der kürzeste Pfad bereits gefunden.

• Ein kürzester Pfad hat keinen Zyklus.

• Ein kürzester Pfad hat max. (|𝑉𝑉| − 1) Kanten.

• Notation:– 𝑆𝑆𝑘𝑘: Menge von 𝑘𝑘 Knoten 𝑣𝑣 mit 𝑘𝑘 besten Pfaden von 𝑣𝑣0 nach 𝑣𝑣– 𝐷𝐷𝑘𝑘 𝑣𝑣 : Kosten/Distanz des besten Pfads von 𝑣𝑣0 über maximal 𝑘𝑘 Knoten in 𝑆𝑆𝑘𝑘 nach 𝑣𝑣

Algorithmen und Datenstrukturen - Kapitel 5 30

Page 31: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Dijkstra-Algorithmus

• Edsger Wybe Dijkstra (1930-2002): niederländischer Informatiker & Turingpreisträger

• Idee: – Wir speichern im Array 𝐷𝐷 für jeden Knoten 𝑣𝑣 die aktuell gültige

Kostenschätzung. – Als Initialisierung verwenden wir die Kosten der direkten Pfade

aus der Adjazenzmatrix 𝑐𝑐 𝑣𝑣,𝑤𝑤 .– In jedem Schritt versuchen wir alle Pfade zu verbessern, indem

wir mögliche Zwischenknoten untersuchen, die den Pfad eventuell kürzer machen.

Algorithmen und Datenstrukturen - Kapitel 5 31

𝑣𝑣0𝑤𝑤

𝑣𝑣5

10

3

Page 32: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Dijkstra-Algorithmus: Implementierung

𝑆𝑆: Menge der bereits abgearbeiteten Knoten𝐷𝐷: aktuelle Kostenschätzung für den Pfad von 𝑣𝑣0 zu allen anderen Knoten

Dijkstra(𝐺𝐺,𝑣𝑣0){𝑆𝑆 ← 𝑣𝑣0forall 𝑣𝑣 ∈ 𝑉𝑉 {𝐷𝐷 𝑣𝑣 ← 𝑐𝑐[𝑣𝑣0, 𝑣𝑣]

}while 𝑉𝑉 − 𝑆𝑆 ≠ ∅ {𝑤𝑤𝑚𝑚𝑖𝑖𝑛𝑛 ← argmin

𝑤𝑤∈V−𝑆𝑆𝐷𝐷(𝑤𝑤)

𝑆𝑆 ← 𝑆𝑆 ∪ 𝑤𝑤𝑚𝑚𝑖𝑖𝑛𝑛for each 𝑣𝑣 ∈ 𝑉𝑉 − 𝑆𝑆 {𝐷𝐷(𝑣𝑣) = min 𝐷𝐷 𝑣𝑣 ,𝐷𝐷 𝑤𝑤𝑚𝑚𝑖𝑖𝑛𝑛 + 𝑐𝑐 𝑤𝑤𝑚𝑚𝑖𝑖𝑛𝑛,𝑣𝑣

}}

}

Algorithmen und Datenstrukturen - Kapitel 5 32

Page 33: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Dijkstra-Algorithmus graphisch

Algorithmen und Datenstrukturen - Kapitel 5 33

10

5

1

92 3

7

4 6

2

A

B

C

D

E

𝒌𝒌 𝒘𝒘𝒌𝒌 𝑺𝑺𝒌𝒌 𝑫𝑫𝒌𝒌 𝑩𝑩 𝑫𝑫𝒌𝒌 𝑪𝑪 𝑫𝑫𝒌𝒌 𝑫𝑫 𝑫𝑫𝒌𝒌 𝑬𝑬

Adjazenzmatrix

0 10 5 ∞ ∞∞ 0 2 1 ∞∞ 3 0 9 2∞ ∞ ∞ 0 47 ∞ ∞ 6 0

Page 34: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Dijkstra-Algorithmus graphisch

Algorithmen und Datenstrukturen - Kapitel 5 34

10

5

1

92 3

7

4 6

2

A

B

C

D

E

𝒌𝒌 𝒘𝒘𝒌𝒌 𝑺𝑺𝒌𝒌 𝑫𝑫𝒌𝒌 𝑩𝑩 𝑫𝑫𝒌𝒌 𝑪𝑪 𝑫𝑫𝒌𝒌 𝑫𝑫 𝑫𝑫𝒌𝒌 𝑬𝑬0 − 𝐴𝐴 10 5 ∞ ∞

Adjazenzmatrix

0 10 5 ∞ ∞∞ 0 2 1 ∞∞ 3 0 9 2∞ ∞ ∞ 0 47 ∞ ∞ 6 0

Page 35: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Dijkstra-Algorithmus graphisch

Algorithmen und Datenstrukturen - Kapitel 5 35

10

5

1

92 3

7

4 6

2

A

B

C

D

E

𝒌𝒌 𝒘𝒘𝒌𝒌 𝑺𝑺𝒌𝒌 𝑫𝑫𝒌𝒌 𝑩𝑩 𝑫𝑫𝒌𝒌 𝑪𝑪 𝑫𝑫𝒌𝒌 𝑫𝑫 𝑫𝑫𝒌𝒌 𝑬𝑬0 − 𝐴𝐴 10 𝟓𝟓 ∞ ∞

Adjazenzmatrix

0 10 5 ∞ ∞∞ 0 2 1 ∞∞ 3 0 9 2∞ ∞ ∞ 0 47 ∞ ∞ 6 0

Page 36: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Dijkstra-Algorithmus graphisch

Algorithmen und Datenstrukturen - Kapitel 5 36

10

5

1

92 3

7

4 6

2

A

B

C

D

E

𝒌𝒌 𝒘𝒘𝒌𝒌 𝑺𝑺𝒌𝒌 𝑫𝑫𝒌𝒌 𝑩𝑩 𝑫𝑫𝒌𝒌 𝑪𝑪 𝑫𝑫𝒌𝒌 𝑫𝑫 𝑫𝑫𝒌𝒌 𝑬𝑬0 − 𝐴𝐴 10 5 ∞ ∞1 𝐶𝐶 𝐴𝐴,𝐶𝐶 8 5 14 7

Adjazenzmatrix

0 10 5 ∞ ∞∞ 0 2 1 ∞∞ 3 0 9 2∞ ∞ ∞ 0 47 ∞ ∞ 6 0

Page 37: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Dijkstra-Algorithmus graphisch

Algorithmen und Datenstrukturen - Kapitel 5 37

10

5

1

92 3

7

4 6

2

A

B

C

D

E

𝒌𝒌 𝒘𝒘𝒌𝒌 𝑺𝑺𝒌𝒌 𝑫𝑫𝒌𝒌 𝑩𝑩 𝑫𝑫𝒌𝒌 𝑪𝑪 𝑫𝑫𝒌𝒌 𝑫𝑫 𝑫𝑫𝒌𝒌 𝑬𝑬0 − 𝐴𝐴 10 5 ∞ ∞1 𝐶𝐶 𝐴𝐴,𝐶𝐶 8 5 14 𝟕𝟕

Adjazenzmatrix

0 10 5 ∞ ∞∞ 0 2 1 ∞∞ 3 0 9 2∞ ∞ ∞ 0 47 ∞ ∞ 6 0

Page 38: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Dijkstra-Algorithmus graphisch

Algorithmen und Datenstrukturen - Kapitel 5 38

10

5

1

92 3

7

4 6

2

A

B

C

D

E

𝒌𝒌 𝒘𝒘𝒌𝒌 𝑺𝑺𝒌𝒌 𝑫𝑫𝒌𝒌 𝑩𝑩 𝑫𝑫𝒌𝒌 𝑪𝑪 𝑫𝑫𝒌𝒌 𝑫𝑫 𝑫𝑫𝒌𝒌 𝑬𝑬0 − 𝐴𝐴 10 5 ∞ ∞1 𝐶𝐶 𝐴𝐴,𝐶𝐶 8 5 14 72 𝐸𝐸 𝐴𝐴,𝐶𝐶,𝐸𝐸 8 5 13 7

Adjazenzmatrix

0 10 5 ∞ ∞∞ 0 2 1 ∞∞ 3 0 9 2∞ ∞ ∞ 0 47 ∞ ∞ 6 0

Page 39: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Dijkstra-Algorithmus graphisch

Algorithmen und Datenstrukturen - Kapitel 5 39

10

5

1

92 3

7

4 6

2

A

B

C

D

E

𝒌𝒌 𝒘𝒘𝒌𝒌 𝑺𝑺𝒌𝒌 𝑫𝑫𝒌𝒌 𝑩𝑩 𝑫𝑫𝒌𝒌 𝑪𝑪 𝑫𝑫𝒌𝒌 𝑫𝑫 𝑫𝑫𝒌𝒌 𝑬𝑬0 − 𝐴𝐴 10 5 ∞ ∞1 𝐶𝐶 𝐴𝐴,𝐶𝐶 8 5 14 72 𝐸𝐸 𝐴𝐴,𝐶𝐶,𝐸𝐸 𝟖𝟖 5 13 7

Adjazenzmatrix

0 10 5 ∞ ∞∞ 0 2 1 ∞∞ 3 0 9 2∞ ∞ ∞ 0 47 ∞ ∞ 6 0

Page 40: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Dijkstra-Algorithmus graphisch

Algorithmen und Datenstrukturen - Kapitel 5 40

10

5

1

92 3

7

4 6

2

A

B

C

D

E

𝒌𝒌 𝒘𝒘𝒌𝒌 𝑺𝑺𝒌𝒌 𝑫𝑫𝒌𝒌 𝑩𝑩 𝑫𝑫𝒌𝒌 𝑪𝑪 𝑫𝑫𝒌𝒌 𝑫𝑫 𝑫𝑫𝒌𝒌 𝑬𝑬0 − 𝐴𝐴 10 5 ∞ ∞1 𝐶𝐶 𝐴𝐴,𝐶𝐶 8 5 14 72 𝐸𝐸 𝐴𝐴,𝐶𝐶,𝐸𝐸 8 5 13 73 𝐵𝐵 𝐴𝐴,𝐶𝐶,𝐸𝐸,𝐵𝐵 8 5 9 7

Adjazenzmatrix

0 10 5 ∞ ∞∞ 0 2 1 ∞∞ 3 0 9 2∞ ∞ ∞ 0 47 ∞ ∞ 6 0

Page 41: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Dijkstra-Algorithmus graphisch

Algorithmen und Datenstrukturen - Kapitel 5 41

10

5

1

92 3

7

4 6

2

A

B

C

D

E

𝒌𝒌 𝒘𝒘𝒌𝒌 𝑺𝑺𝒌𝒌 𝑫𝑫𝒌𝒌 𝑩𝑩 𝑫𝑫𝒌𝒌 𝑪𝑪 𝑫𝑫𝒌𝒌 𝑫𝑫 𝑫𝑫𝒌𝒌 𝑬𝑬0 − 𝐴𝐴 10 5 ∞ ∞1 𝐶𝐶 𝐴𝐴,𝐶𝐶 8 5 14 72 𝐸𝐸 𝐴𝐴,𝐶𝐶,𝐸𝐸 8 5 13 73 𝐵𝐵 𝐴𝐴,𝐶𝐶,𝐸𝐸,𝐵𝐵 8 5 𝟗𝟗 7

Adjazenzmatrix

0 10 5 ∞ ∞∞ 0 2 1 ∞∞ 3 0 9 2∞ ∞ ∞ 0 47 ∞ ∞ 6 0

Page 42: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Dijkstra-Algorithmus graphisch

Algorithmen und Datenstrukturen - Kapitel 5 42

10

5

1

92 3

7

4 6

2

A

B

C

D

E

𝒌𝒌 𝒘𝒘𝒌𝒌 𝑺𝑺𝒌𝒌 𝑫𝑫𝒌𝒌 𝑩𝑩 𝑫𝑫𝒌𝒌 𝑪𝑪 𝑫𝑫𝒌𝒌 𝑫𝑫 𝑫𝑫𝒌𝒌 𝑬𝑬0 − 𝐴𝐴 10 5 ∞ ∞1 𝐶𝐶 𝐴𝐴,𝐶𝐶 8 5 14 72 𝐸𝐸 𝐴𝐴,𝐶𝐶,𝐸𝐸 8 5 13 73 𝐵𝐵 𝐴𝐴,𝐶𝐶,𝐸𝐸,𝐵𝐵 8 5 9 74 𝐷𝐷 𝐴𝐴,𝐶𝐶,𝐸𝐸,𝐵𝐵,𝐷𝐷 8 5 9 7

Adjazenzmatrix

0 10 5 ∞ ∞∞ 0 2 1 ∞∞ 3 0 9 2∞ ∞ ∞ 0 47 ∞ ∞ 6 0

Page 43: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Dijkstra-Algorithmus: Analyse

• Liefert optimale Lösung, nicht nur Näherung

• Falls Zyklen mit negativen Kosten zugelassen wären, gäbe es keinen eindeutigen Pfad mit minimalen Kosten mehr

• Komplexität:

– Falls 𝐺𝐺 zusammenhängend, mit Adjazenzmatrix 𝑂𝑂 𝑉𝑉 2

– Einsatz als „All Pairs Shortest Path“ prinzipiell möglich,ergibt Zeitkomplexität 𝑂𝑂 𝑉𝑉 ⋅ 𝑉𝑉 2 = 𝑂𝑂 𝑉𝑉 3 .

Algorithmen und Datenstrukturen - Kapitel 5 43

-10

3 2A

B C

Page 44: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Floyd-Algorithmus

• Robert W Floyd (1936 – 2001): Amerikanischer Informatiker & Turingpreisträger

• „All Pairs Shortest Path“• Gegeben: Gerichteter Graph 𝐺𝐺 mit Kostenfunktion

𝑐𝑐 𝑣𝑣,𝑤𝑤 �≥ 0= ∞= 0

falls eine Kante 𝑣𝑣 nach 𝑤𝑤 existiertfalls keine Kante 𝑣𝑣 nach 𝑤𝑤 existiert

𝑣𝑣 = 𝑤𝑤• Gesucht: Pfad von jedem Knoten 𝑣𝑣 zu jedem Knoten 𝑤𝑤 mit

minimalen Gesamtkosten

• Idee:– Existierende Kanten im Graphen zugrunde legen– Versuche sukzessive, zwei Knoten über einen Zwischenknoten

günstiger zu verbinden als bisher– Lösung: Dynamische Programmierung

Algorithmen und Datenstrukturen - Kapitel 5 44

Page 45: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Floyd-Algorithmus: Dynamische Programmierung

• Grundidee– Betrachte alle Knoten der Reihe nach

als mögliche Zwischenknoten 𝑘𝑘– Speicherung in einer Matrix 𝑖𝑖[𝑖𝑖, 𝑗𝑗],

die in jedem Schritt aktualisiert wird

• Initialisierung durch direkte Kanten des gegebenen Graphen– Für alle 𝑖𝑖, 𝑗𝑗 ∈ 1, … , 𝑉𝑉 : setze 𝑖𝑖0 𝑖𝑖, 𝑗𝑗 = 𝑐𝑐 𝑖𝑖, 𝑗𝑗– Entspricht Lösung der Elementarprobleme

• Aktualisiere Matrix 𝑖𝑖 𝑖𝑖, 𝑗𝑗 für Zwischenknoten 𝑘𝑘:– Sind Wege über Knoten 𝑘𝑘 günstiger als bisherige Wege?– 𝑖𝑖𝑘𝑘[𝑖𝑖, 𝑗𝑗] = min 𝑖𝑖𝑘𝑘−1 𝑖𝑖, 𝑗𝑗 ,𝑖𝑖𝑘𝑘−1 𝑖𝑖, 𝑘𝑘 + 𝑖𝑖𝑘𝑘−1 𝑘𝑘, 𝑗𝑗– Entspricht Zusammensetzen der Teilergebnisse zur

Gesamtlösung

Algorithmen und Datenstrukturen - Kapitel 5 45

k

ji

𝑖𝑖𝑘𝑘−1 𝑖𝑖, 𝑘𝑘 𝑖𝑖𝑘𝑘−1 𝑘𝑘, 𝑗𝑗

𝑖𝑖𝑘𝑘−1[𝑖𝑖, 𝑗𝑗]

Page 46: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Floyd-Algorithmus: Pseudo-Code

Gegeben: Kosten 𝑐𝑐 𝑣𝑣,𝑤𝑤 ∈ ℝ ∪ {∞} von Knoten 𝑣𝑣 nach 𝑤𝑤

Für alle Knotenpaare 𝑖𝑖, 𝑗𝑗 ∈ 0, … , 𝑉𝑉 − 1𝑖𝑖 𝑖𝑖 𝑗𝑗 ← 𝑐𝑐 𝑖𝑖, 𝑗𝑗

Für alle 𝑖𝑖 ∈ 0, … , 𝑉𝑉 − 1Für alle 𝑗𝑗 ∈ 0, … , 𝑉𝑉 − 1

Für alle 𝑘𝑘 ∈ 0, … , 𝑉𝑉 − 1𝑖𝑖 𝑖𝑖 𝑗𝑗 ← min 𝑖𝑖 𝑖𝑖 𝑗𝑗 ,𝑖𝑖 𝑖𝑖 𝑘𝑘 + 𝑖𝑖 𝑘𝑘 𝑗𝑗

Algorithmen und Datenstrukturen - Kapitel 5 46

Falls Weg über 𝑘𝑘besser / kürzer alsbisher bester Weg, ist dieser Weg nun der Favorit.

Initialisierung von Matrix 𝑖𝑖:- Jeder Knoten hat Distanz

0 zu sich selbst- Sonst übernehmen wir

erst einmal die direkten (schon bekannten) Verbindungen

k

ji

𝑖𝑖 𝑖𝑖, 𝑘𝑘 𝑖𝑖 𝑘𝑘, 𝑗𝑗

𝑖𝑖[𝑖𝑖, 𝑗𝑗]

Page 47: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Floyd-Algorithmus: Weginformationen

Gegeben: Kosten 𝑐𝑐 𝑣𝑣,𝑤𝑤 ∈ ℝ ∪ {∞} von Knoten 𝑣𝑣 nach 𝑤𝑤

Für alle Knotenpaare 𝑖𝑖, 𝑗𝑗 ∈ 0, … , 𝑉𝑉 − 1𝑖𝑖 𝑖𝑖 𝑗𝑗 ← 𝑐𝑐 𝑖𝑖, 𝑗𝑗𝑃𝑃 𝑖𝑖 𝑗𝑗 ← 𝑗𝑗 (sonst undef.)

Für alle 𝑖𝑖 ∈ 0, … , 𝑉𝑉 − 1Für alle 𝑗𝑗 ∈ 0, … , 𝑉𝑉 − 1

Für alle 𝑘𝑘 ∈ 0, … , 𝑉𝑉 − 1𝑖𝑖 𝑖𝑖 𝑗𝑗 ← min 𝑖𝑖 𝑖𝑖 𝑗𝑗 ,𝑖𝑖 𝑖𝑖 𝑘𝑘 + 𝑖𝑖 𝑘𝑘 𝑗𝑗𝑃𝑃 𝑖𝑖 𝑗𝑗 ← 𝑘𝑘

Algorithmen und Datenstrukturen - Kapitel 5 47

𝑃𝑃 speichert für zwei Knoten 𝑖𝑖, 𝑗𝑗 den Knoten 𝑘𝑘, der auf dem optimalen Pfad als nächster Knoten gewählt wird.

𝑃𝑃11 ⋯ 𝑃𝑃1𝑖𝑖 ⋯ 𝑃𝑃1𝑛𝑛⋮ ⋱ ⋮ ⋱ ⋮𝑃𝑃𝑖𝑖1 ⋯ 𝑃𝑃𝑖𝑖𝑖𝑖 ⋯ 𝑃𝑃𝑖𝑖𝑛𝑛⋮ ⋱ ⋮ ⋱ ⋮𝑃𝑃𝑛𝑛1 ⋯ 𝑃𝑃𝑛𝑛𝑖𝑖 ⋯ 𝑃𝑃𝑛𝑛𝑛𝑛

Der kürzeste Weg von 𝑖𝑖 nach 𝑗𝑗verläuft über 𝑃𝑃𝑖𝑖𝑖𝑖.

Page 48: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Floyd-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 48

A B

C D

2

5

6

7

4

8

Initialisierung:0 5 2 ∞∞ 0 8 ∞∞ ∞ 0 74 6 ∞ 0

𝑘𝑘 = 𝐴𝐴0 5 2 ∞∞ 0 8 ∞∞ ∞ 0 74 6 𝟔𝟔 0

𝑘𝑘 = 𝐵𝐵0 5 2 ∞∞ 0 8 ∞∞ ∞ 0 74 6 6 0

𝑘𝑘 = 𝐶𝐶0 5 2 𝟗𝟗∞ 0 8 𝟏𝟏𝟓𝟓∞ ∞ 0 74 6 6 0

𝑘𝑘 = 𝐷𝐷0 5 2 9𝟏𝟏𝟗𝟗 0 8 15𝟏𝟏𝟏𝟏 𝟏𝟏𝟏𝟏 0 74 6 6 0

Page 49: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Floyd-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 49

A B

C D

2

5

6

7

4

8

Initialisierung:0 5 2 ∞∞ 0 8 ∞∞ ∞ 0 74 6 ∞ 0

𝑘𝑘 = 𝐴𝐴0 5 2 ∞∞ 0 8 ∞∞ ∞ 0 74 6 𝟔𝟔 0

𝑘𝑘 = 𝐵𝐵0 5 2 ∞∞ 0 8 ∞∞ ∞ 0 74 6 6 0

𝑘𝑘 = 𝐶𝐶0 5 2 𝟗𝟗∞ 0 8 𝟏𝟏𝟓𝟓∞ ∞ 0 74 6 6 0

𝑘𝑘 = 𝐷𝐷0 5 2 9𝟏𝟏𝟗𝟗 0 8 15𝟏𝟏𝟏𝟏 𝟏𝟏𝟏𝟏 0 74 6 6 0

𝑃𝑃𝐴𝐴:𝐴𝐴 𝐵𝐵 𝐶𝐶 −− 𝐵𝐵 𝐶𝐶 −− − 𝐶𝐶 𝐷𝐷𝐴𝐴 𝐵𝐵 𝑨𝑨 𝐷𝐷

𝑃𝑃0:𝐴𝐴 𝐵𝐵 𝐶𝐶 −− 𝐵𝐵 𝐶𝐶 −− − 𝐶𝐶 𝐷𝐷𝐴𝐴 𝐵𝐵 − 𝐷𝐷

𝑃𝑃𝐵𝐵:𝐴𝐴 𝐵𝐵 𝐶𝐶 −− 𝐵𝐵 𝐶𝐶 −− − 𝐶𝐶 𝐷𝐷𝐴𝐴 𝐵𝐵 𝐴𝐴 𝐷𝐷

𝑃𝑃𝐶𝐶:𝐴𝐴 𝐵𝐵 𝐶𝐶 𝑪𝑪− 𝐵𝐵 𝐶𝐶 𝑪𝑪− − 𝐶𝐶 𝐷𝐷𝐴𝐴 𝐵𝐵 𝐴𝐴 𝐷𝐷

𝑃𝑃𝐷𝐷:𝐴𝐴 𝐵𝐵 𝐶𝐶 𝐶𝐶𝑫𝑫 𝐵𝐵 𝐶𝐶 𝐶𝐶𝑫𝑫 𝑫𝑫 𝐶𝐶 𝐷𝐷𝐴𝐴 𝐵𝐵 𝐴𝐴 𝐷𝐷

Page 50: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Floyd-Algorithmus: Komplexität

• 3 geschachtelte Schleifen mit 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 über 𝑉𝑉

• Zeitkomplexität: 𝑂𝑂 𝑉𝑉 3

• Platzkomplexität: 𝑂𝑂 𝑉𝑉 2

• Warshall-Algorithmus– Aus demselben Jahr (1962) stammt ein Algorithmus von

Warshall, der statt Kosten nur die Existenz von Verbindungen betrachtet (transitive Hülle).

– Innere Schleife läuft auf booleschen Werten:falls ¬𝑖𝑖 𝑖𝑖 [𝑗𝑗]𝑖𝑖 𝑖𝑖 𝑗𝑗 = 𝑖𝑖 𝑖𝑖 𝑘𝑘 ∧ 𝑖𝑖[𝑘𝑘][𝑗𝑗]

Algorithmen und Datenstrukturen - Kapitel 5 50

Page 51: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Floyd-Algorithmus: Negative Kanten

• Wir haben negative Kanten nicht ausgeschlossen: 𝑐𝑐 𝑣𝑣,𝑤𝑤 ∈ ℝ ∪ {∞}

• Was passiert mit einer negativen Kante?

• Scheint ok. Noch ein Beispiel:

Algorithmen und Datenstrukturen - Kapitel 5 51

A B

C D

2

5

6

7

-4

8

𝑖𝑖 =

0 5 2 9𝟏𝟏𝟏𝟏 0 8 15𝟏𝟏 𝟖𝟖 0 7−𝟒𝟒 𝟏𝟏 −𝟐𝟐 0

A B

C D

2

5

6

-7

4

8

𝑖𝑖 =

−𝟏𝟏 𝟏𝟏 𝟏𝟏 −𝟔𝟔𝟓𝟓 0 𝟕𝟕 𝟎𝟎−𝟏𝟏 −𝟏𝟏 −𝟏𝟏 −𝟖𝟖𝟏𝟏 𝟓𝟓 𝟓𝟓 −𝟐𝟐

Page 52: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Negative Kreise

• Einzelne negative Kanten → kein Problem, kürzeste Wege bleiben meist wohldefiniert.

• Negative Kreise

– Falls es einen Pfad von 𝑣𝑣 nach 𝐾𝐾 und einen Pfad von 𝐾𝐾 nach 𝑤𝑤gibt mit 𝐾𝐾 < 0, dann ist der kürzeste Pfad von 𝑣𝑣 nach 𝑤𝑤 nicht definiert.

– Für 𝐾𝐾 ≥ 0 gibt es keine Probleme. Der kürzeste Pfad ist wohldefiniert.

Algorithmen und Datenstrukturen - Kapitel 5 52

𝐾𝐾1

−1

𝑤𝑤𝑣𝑣 𝐴𝐴

𝐾𝐾2 𝐾𝐾3

𝐾𝐾6 𝐾𝐾5

𝐾𝐾4

3−1

−1

−1

−13 2𝐾𝐾

Page 53: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Informierte Suche

• Dijkstra-Algorithmus: – Greedy: Füge Kante sofort hinzu, falls sie geringere Kosten

verspricht– Kosten zu allen potentiellen Zielen (= Knoten) werden bestimmt

• Verbesserung: Falls das Ziel bekannt ist, können Kanten gezielt ausgewählt werden

• Eine Heuristik ist eine Strategie, um das Auffinden von Lösungen zu beschleunigen, indem zusätzliches Wissen genutzt wird.

• Viele Heuristiken orientieren sich an menschlichen Problemlösungen.

• Heuristik gibt in der Regel eine Schätzung von Kosten an.

Algorithmen und Datenstrukturen - Kapitel 5 53

Page 54: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

A*-Algorithmus: Idee

• Besuche zuerst Knoten, die wahrscheinlich schnell zum Ziel führen.• Jeder besuchte Knoten erhält einen Wert 𝑓𝑓 𝑥𝑥 , der angibt, wie

lange der Pfad vom Start zum Ziel über den Knoten 𝑥𝑥 im günstigsten Fall ist.

• Der Knoten mit dem niedrigsten 𝑓𝑓-Wert wird als nächstes untersucht:

𝑓𝑓 𝑥𝑥 = 𝑔𝑔 𝑥𝑥 + ℎ 𝑥𝑥• Dabei gibt

– 𝑔𝑔 𝑥𝑥 die tatsächlichen Kosten vom Startknoten 𝑆𝑆 zu 𝑥𝑥 und– ℎ 𝑥𝑥 die geschätzten Kosten von 𝑥𝑥 bis zum Zielknoten an.

• Die verwendete Heuristik ℎ 𝑥𝑥 darf die Kosten für keinen Knoten 𝑥𝑥überschätzen, da sonst die optimale Lösung vielleicht nicht gefunden wird.

Algorithmen und Datenstrukturen - Kapitel 5 54

𝑆𝑆 𝑥𝑥

𝑍𝑍

𝑔𝑔 𝑥𝑥 ℎ 𝑥𝑥

Page 55: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

A*-Algorithmus: Datenstrukturen

• Jeder Knoten des Graphen kann einer der folgenden Zustände zugeordnet werden. Die Knoten werden dementsprechend in Listen verwaltet:

– Der Knoten wurde noch nicht verarbeitet und wir kennen noch keinen Weg dorthin.

– Ein Weg zum Knoten ist bekannt, aber es könnte einen kürzeren Weg geben → OpenList

– Der kürzeste Weg zum Knoten wurde gefunden → ClosedList

Algorithmen und Datenstrukturen - Kapitel 5 55

Page 56: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

A*-Algorithmus: Beispiel

Idee: Darstellung des Straßen-netzes als gewichteter Graph.

Knoten:

• Jeder Knoten steht für eine Stadt. • Zwei Knoten sind verbunden wenn es eine direkte

Straßenverbindung zwischen den entsprechenden Städten gibt. • Die Kosten der Kanten entsprechen der Länge der Straße zwischen

den Städten.• Gesucht ist der kürzeste Weg von Stadt S nach Stadt Z.• Als Heuristik ℎ(𝑥𝑥) nutzen wir die Luftlinie zwischen der Stadt 𝑥𝑥 und

der Zielstadt Z.

Algorithmen und Datenstrukturen - Kapitel 5 56

C108k

m

Z0km

E87km

D140k

m

S222k

m

A158k

m

B96km

145km

70km

103km 116km

183km

102km

84km

53km

xh(x)

StadtLuftlinie zum Ziel=

Page 57: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

A*-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 57

C108k

m

Z0km

E87km

D140k

m

S222k

m

A158k

m

B96km

145km

70km

103km 116km

183km

102km

84km

53km

= Zeiger auf den Vorgänger

Schritt OpenList (Stadt, f ) ClosedList (Stadt, Entfernung von S)

0 (S, 0) ---

Page 58: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

A*-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 58

C108k

m

Z0km

E87km

D140k

m

S222k

m

A158k

m

B96km

145km

70km

103km 116km

183km

102km

84km

53km

= Zeiger auf den Vorgänger

Schritt OpenList (Stadt, f ) ClosedList (Stadt, Entfernung von S)

0 (S, 0) ---

1 (A, 228),(D, 285) (S, 0)

Page 59: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

A*-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 59

C108k

m

Z0km

E87km

D140k

m

S222k

m

A158k

m

B96km

145km

70km

103km 116km

183km

102km

84km

53km

= Zeiger auf den Vorgänger

Schritt OpenList (Stadt, f ) ClosedList (Stadt, Entfernung von S)

0 (S, 0) ---

1 (A, 228),(D, 285) (S, 0)

2 (D, 285), (B, 269), (C, 231) (S, 0), (A, 70)

Page 60: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

A*-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 60

C108k

m

Z0km

E87km

D140k

m

S222k

m

A158k

m

B96km

145km

70km

103km 116km

183km

102km

84km

53km

= Zeiger auf den Vorgänger

Schritt OpenList (Stadt, f ) ClosedList (Stadt, Entfernung von S)

0 (S, 0) ---

1 (A, 228),(D, 285) (S, 0)

2 (D, 285), (B, 269), (C, 231) (S, 0), (A, 70)

3 (D, 285), (B, 269), (Z, 306) (S, 0), (A, 70), (C, 123)

Page 61: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

A*-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 61

= Zeiger auf den Vorgänger

Schritt OpenList (Stadt, f ) ClosedList (Stadt, Entfernung von S)

0 (S, 0) ---

1 (A, 228),(D, 285) (S, 0)

2 (D, 285), (B, 269), (C, 231) (S, 0), (A, 70)

3 (D, 285), (B, 269), (Z, 306) (S, 0), (A, 70), (C, 123)

4 (D, 285), (Z, 289) (S, 0), (A, 70), (C, 123), (B, 173)

C108k

m

Z0km

E87km

D140k

m

S222k

m

A158k

m

B96km

145km

70km

103km 116km

183km

102km

84km

53km

Page 62: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

A*-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 62

= Zeiger auf den Vorgänger

Schritt OpenList (Stadt, f ) ClosedList (Stadt, Entfernung von S)

0 (S, 0) ---

1 (A, 228),(D, 285) (S, 0)

2 (D, 285), (B, 269), (C, 231) (S, 0), (A, 70)

3 (D, 285), (B, 269), (Z, 306) (S, 0), (A, 70), (C, 123)

4 (D, 285), (Z, 289) (S, 0), (A, 70), (C, 123), (B, 173)

5 (Z, 289),(E, 316) (S, 0), (A, 70), (C, 123), (B, 173),(D, 145)

C108k

m

Z0km

E87km

D140k

m

S222k

m

A158k

m

B96km

145km

70km

103km 116km

183km

102km

84km

53km

Page 63: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

A*-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 63

= Zeiger auf den Vorgänger

Schritt OpenList (Stadt, f ) ClosedList (Stadt, Entfernung von S)

0 (S, 0) ---

1 (A, 228),(D, 285) (S, 0)

2 (D, 285), (B, 269), (C, 231) (S, 0), (A, 70)

3 (D, 285), (B, 269), (Z, 306) (S, 0), (A, 70), (C, 123)

4 (D, 285), (Z, 289) (S, 0), (A, 70), (C, 123), (B, 173)

5 (Z, 289),(E, 316) (S, 0), (A, 70), (C, 123), (B, 173),(D, 145)

6 (E, 316) Pfad gefunden: S A B Z

C108k

m

Z0km

E87km

D140k

m

S222k

m

A158k

m

B96km

145km

70km

103km 116km

183km

102km

84km

53km

Page 64: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

A*-Algorithmus: Qualitätseigenschaften

• VollständigWenn es eine Lösung gibt, so wird diese auch gefunden.

• OptimalEs wird immer eine optimale Lösung gefunden.

• Optimal effizientBezogen auf die Laufzeit gibt es keinen Algorithmus, der die gleiche Heuristik verwendet und weniger Knoten besucht.

Algorithmen und Datenstrukturen - Kapitel 5 64

Page 65: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

A*-Algorithmus: Eigenschaft der Heuristik

• Die verwendete Heuristik für ℎ 𝑥𝑥 darf die Kosten für keinen Knoten 𝑥𝑥überschätzen.

Werden die Kosten überschätzt, so ist die Optimalität des Algorithmus nicht mehr gewährleistet:

• Für die schlechteste Heuristik ℎ 𝑥𝑥 = 0 gilt:

− die geschätzten Kosten für jeden Knoten entsprechen genau den Kosten, um diesen Knoten zu erreichen.

− Der A*-Algorithmus bildet den Dijkstra-Algorithmus nach.

Algorithmen und Datenstrukturen - Kapitel 5 65

A100k

m

Z0km

158km

B96km100km 16km

100km

50km

S

OpenList ClosedList

(S, 0) ---

(A, 150),(B,196) (S, 0)

(B,196), (Z,150) (S, 0), (A, 150)

Page 66: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Minimaler Spannbaum

Gegeben: Ungerichteter zusammenhängender Graph 𝐺𝐺 = 𝑉𝑉,𝐸𝐸mit Kantengewichten 𝑐𝑐:𝐸𝐸 → ℝ.

Gesucht: Ungerichteter Subgraph 𝐺𝐺′ = (𝑉𝑉,𝐸𝐸′) mit

• 𝐸𝐸′ ⊆ 𝐸𝐸.• 𝐺𝐺′ ist zykelfrei und zusammenhängend.

(Äquivalent: 𝐺𝐺′ ist ein Baum).• Für alle Subgraphen 𝐺𝐺′′ = (𝑉𝑉,𝐸𝐸′′) gilt

�𝑒𝑒∈𝐸𝐸′

𝑐𝑐(𝑟𝑟) ≤ �𝑒𝑒∈𝐸𝐸′′

𝑐𝑐(𝑟𝑟)

Algorithmen und Datenstrukturen - Kapitel 5 66

Page 67: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Prim-Algorithmus

• Idee: – Beginne mit einem beliebigen Knoten des Graphen.– Finde sukzessive die minimale Kante, die den Subgraphen mit

einem noch nicht gewählten Knoten verbindet.– In jedem Schritt wird der aktuelle Subgraph um jeweils diese

Kante und den inzidenten Knoten erweitert.

• Komplexität ist 𝑂𝑂 𝑉𝑉 2 , denn für jeden neu einzufügenden Knoten werden die Kanten zu anderen Knoten überprüft.

Algorithmen und Datenstrukturen - Kapitel 5 67

𝑉𝑉′ ← 𝑣𝑣0 beliebig𝐸𝐸′ ← ∅Solange 𝑉𝑉 ≠ 𝑉𝑉′:𝑟𝑟, 𝑣𝑣 = argmin

𝑒𝑒∈𝑉𝑉′× 𝑉𝑉−𝑉𝑉′𝑐𝑐 𝑟𝑟

𝐸𝐸′ = 𝐸𝐸′ ∪ 𝑟𝑟, 𝑣𝑣𝑉𝑉′ = 𝑉𝑉′ ∪ 𝑣𝑣

Page 68: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Prim-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 68

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

𝑽𝑽′ 𝑬𝑬′

Page 69: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Prim-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 69

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

𝑽𝑽′ 𝑬𝑬′1 ∅

Page 70: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Prim-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 70

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

𝑽𝑽′ 𝑬𝑬′1 ∅

1,3 1,3

Page 71: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Prim-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 71

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

𝑽𝑽′ 𝑬𝑬′1 ∅

1,3 1,31,3,6 1,3 , 3,6

Page 72: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Prim-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 72

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

𝑽𝑽′ 𝑬𝑬′1 ∅

1,3 1,31,3,6 1,3 , 3,6

1,3,6,4 1,3 , 3,6 , 6,4

Page 73: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Prim-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 73

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

𝑽𝑽′ 𝑬𝑬′1 ∅

1,3 1,31,3,6 1,3 , 3,6

1,3,6,4 1,3 , 3,6 , 6,41,3,6,4,2 1,3 , 3,6 , 6,4 , 3,2

Page 74: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Prim-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 74

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

𝑽𝑽′ 𝑬𝑬′1 ∅

1,3 1,31,3,6 1,3 , 3,6

1,3,6,4 1,3 , 3,6 , 6,41,3,6,4,2 1,3 , 3,6 , 6,4 , 3,2

1,3,6,4,2,5 1,3 , 3,6 , 6,4 , 3,2 , 2,5

Page 75: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Algorithmus von Kruskal

• Idee (ähnlich zu Prim): – Starte mit leerer Kantenmenge.– Füge sukzessive minimale Kanten bezüglich ihrer Kosten hinzu,

sodass kein Kreis entsteht.– Stoppe, falls keine solche Kante mehr gefunden werden kann

(die nächste Kante bildet einen Kreis, alle Knoten erreichbar).

• Das Sortieren dominiert hier die Laufzeit: 𝑂𝑂 𝐸𝐸 log 𝐸𝐸 .

Algorithmen und Datenstrukturen - Kapitel 5 75

𝐸𝐸′ ← ∅Sortiere 𝐸𝐸 aufsteigend nach 𝑐𝑐(𝐸𝐸).Solange 𝐸𝐸 ≠ ∅𝑟𝑟 ← min 𝐸𝐸𝐸𝐸 = 𝐸𝐸 − 𝑟𝑟Falls 𝐺𝐺 𝑉𝑉,𝐸𝐸′ ∪ 𝑟𝑟 kreisfrei𝐸𝐸′ = 𝐸𝐸′ ∪ 𝑟𝑟

Page 76: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Algorithmus von Kruskal: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 76

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

𝑬𝑬1,3 → 14,6 → 22,5 → 33,6 → 41,4 → 52,3 → 51,2 → 63,5 → 65,6 → 6

Page 77: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Algorithmus von Kruskal: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 77

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

𝑬𝑬1,3 → 14,6 → 22,5 → 33,6 → 41,4 → 52,3 → 51,2 → 63,5 → 65,6 → 6

Page 78: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Algorithmus von Kruskal: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 78

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

𝑬𝑬1,3 → 14,6 → 22,5 → 33,6 → 41,4 → 52,3 → 51,2 → 63,5 → 65,6 → 6

Page 79: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Algorithmus von Kruskal: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 79

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

𝑬𝑬1,3 → 14,6 → 22,5 → 33,6 → 41,4 → 52,3 → 51,2 → 63,5 → 65,6 → 6

Page 80: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Algorithmus von Kruskal: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 80

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

𝑬𝑬1,3 → 14,6 → 22,5 → 33,6 → 41,4 → 52,3 → 51,2 → 63,5 → 65,6 → 6

Page 81: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Algorithmus von Kruskal: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 81

𝑬𝑬1,3 → 14,6 → 22,5 → 33,6 → 41,4 → 52,3 → 51,2 → 63,5 → 65,6 → 6

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

→ Kreis

Page 82: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Algorithmus von Kruskal: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 82

𝑬𝑬1,3 → 14,6 → 22,5 → 33,6 → 41,4 → 52,3 → 51,2 → 63,5 → 65,6 → 6

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

Page 83: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Algorithmus von Kruskal: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 83

𝑬𝑬1,3 → 14,6 → 22,5 → 33,6 → 41,4 → 52,3 → 51,2 → 63,5 → 65,6 → 6

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

→ Kreis

Page 84: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Algorithmus von Kruskal: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 84

𝑬𝑬1,3 → 14,6 → 22,5 → 33,6 → 41,4 → 52,3 → 51,2 → 63,5 → 65,6 → 6

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

→ Kreis

Page 85: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Algorithmus von Kruskal: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 85

𝑬𝑬1,3 → 14,6 → 22,5 → 33,6 → 41,4 → 52,3 → 51,2 → 63,5 → 65,6 → 6

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

→ Kreis

Page 86: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Flussnetzwerke

• Ein Flussnetzwerk 𝐺𝐺, 𝑐𝑐 ist ein gerichteter Graph 𝐺𝐺 = 𝑉𝑉,𝐸𝐸 , wobei– jede Kante 𝑟𝑟, 𝑣𝑣 ∈ 𝐸𝐸 die Kapazität 𝑐𝑐 𝑟𝑟, 𝑣𝑣 ≥ 0 hat– und es eine Quelle 𝑞𝑞 ∈ 𝑉𝑉 und eine Senke 𝑐𝑐 ∈ 𝑉𝑉 gibt.

• Wir setzen 𝑐𝑐 𝑟𝑟, 𝑣𝑣 = 0, falls 𝑟𝑟, 𝑣𝑣 ∉ 𝐸𝐸

• anschaulich:– Wasserleitungen mit unterschiedlichen Kapazitäten– Verkehrsströme, Straßenkapazitäten– Kommunikationswege mit Bandbreiten

Algorithmen und Datenstrukturen - Kapitel 5 86

𝑞𝑞 𝑐𝑐

12

9 7

14

20

4

104

13

16

Page 87: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Fluss in einem Flussnetzwerk

• Ein Fluss ist eine Funktion 𝑓𝑓:𝑉𝑉 × 𝑉𝑉 → ℝ mit den Eigenschaften

– Kapazitätsbeschränkung: Für 𝑟𝑟, 𝑣𝑣 ∈ 𝑉𝑉 gilt 𝑓𝑓 𝑟𝑟, 𝑣𝑣 ≤ 𝑐𝑐 𝑟𝑟, 𝑣𝑣

– Symmetrie: Für 𝑟𝑟, 𝑣𝑣 ∈ 𝑉𝑉 gilt 𝑓𝑓 𝑟𝑟, 𝑣𝑣 = −𝑓𝑓 𝑣𝑣,𝑟𝑟„𝑟𝑟 gibt 𝑣𝑣 7 Einheiten“ „𝑣𝑣 nimmt 𝑟𝑟 7 Einheiten“ „𝑣𝑣 gibt 𝑟𝑟 −7 Einheiten“

– Flusserhaltung: Für 𝑟𝑟 ∈ 𝑉𝑉 − {𝑞𝑞, 𝑐𝑐} gilt ∑𝑣𝑣∈𝑉𝑉 𝑓𝑓 𝑟𝑟, 𝑣𝑣 = 0

Algorithmen und Datenstrukturen - Kapitel 5 87

u v7/12

𝑓𝑓 𝑟𝑟,𝑣𝑣 = 7 ≤ 12 = 𝑐𝑐(𝑟𝑟,𝑣𝑣)

u

𝑓𝑓 𝑟𝑟, 𝑣𝑣5 = −7

𝑓𝑓 𝑟𝑟,𝑣𝑣3 = 4

𝑓𝑓 𝑟𝑟, 𝑣𝑣2 = 2

𝑓𝑓 𝑟𝑟,𝑣𝑣1 = 4

𝑓𝑓 𝑟𝑟,𝑣𝑣4 = −3u

𝑓𝑓 𝑣𝑣5,𝑟𝑟 = 7

𝑓𝑓 𝑟𝑟, 𝑣𝑣3 = 4

𝑓𝑓 𝑟𝑟,𝑣𝑣2 = 2

𝑓𝑓 𝑟𝑟,𝑣𝑣1 = 4

𝑓𝑓 𝑣𝑣4,𝑟𝑟 = 3Symmetrie

Page 88: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Maximaler Fluss

• Der Wert 𝑤𝑤 𝑓𝑓 eines Flusses 𝑓𝑓 ist definiert als 𝑤𝑤 𝑓𝑓 = ∑𝑣𝑣∈𝑉𝑉 𝑓𝑓 𝑞𝑞, 𝑣𝑣– entspricht Gesamtfluss aus der Quelle 𝑞𝑞 heraus

• Problem des maximalen Flusses– Gegeben ein Flussnetzwerk 𝐺𝐺, 𝑐𝑐– Gesucht ein Fluss 𝑓𝑓 auf 𝐺𝐺, 𝑐𝑐 mit maximalem Wert 𝑤𝑤 𝑓𝑓

Algorithmen und Datenstrukturen - Kapitel 5 88

𝑞𝑞 𝑐𝑐

-/6

4/7 -/1

4/5

-/84/4

𝑤𝑤 𝑓𝑓 = 0 + 4 = 4

Page 89: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Residualnetzwerk

• Restkapazität 𝑐𝑐𝑓𝑓 𝑟𝑟, 𝑣𝑣 zwischen 𝑟𝑟, 𝑣𝑣 ∈ 𝑉𝑉 ist 𝑐𝑐𝑓𝑓 𝑟𝑟, 𝑣𝑣 = 𝑐𝑐 𝑟𝑟, 𝑣𝑣 −𝑓𝑓 𝑟𝑟, 𝑣𝑣– beachte: formal ist 𝑓𝑓 𝑟𝑟, 𝑣𝑣 < 0 möglich (vgl. Symmetrie)

• Der Restgraph 𝐺𝐺𝑓𝑓 = 𝑉𝑉,𝐸𝐸𝑓𝑓 bzgl. Flussnetzwerk 𝐺𝐺, 𝑐𝑐 und Fluss 𝑓𝑓ist definiert durch die Kantenmenge 𝐸𝐸𝑓𝑓 =𝑟𝑟, 𝑣𝑣 ∈ 𝑉𝑉 × 𝑉𝑉 𝑐𝑐𝑓𝑓 𝑟𝑟, 𝑣𝑣 > 0

• 𝐺𝐺𝑓𝑓, 𝑐𝑐𝑓𝑓 ist das sogenannte Residualnetzwerk

„Flussnetzwerk minus Fluss = Residualnetzwerk“

Algorithmen und Datenstrukturen - Kapitel 5 89

𝑞𝑞 𝑐𝑐

-/6

4/7 -/1

4/5

-/84/4

𝑞𝑞 𝑐𝑐

6

3 5 1

84

4Flussnetzwerk

𝐺𝐺, 𝑐𝑐 mit Fluss 𝑓𝑓Residualnetz-werk 𝐺𝐺𝑓𝑓, 𝑐𝑐𝑓𝑓

Page 90: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Flussvergrößernder Pfad

• Ein Pfad 𝑝𝑝 von 𝑞𝑞 nach 𝑐𝑐 im Residualnetzwerk heißt flussvergrößernder oder augmentierender Pfad.

• Die Restkapazität von 𝑝𝑝 ist 𝑐𝑐𝑓𝑓 𝑝𝑝 = min{𝑐𝑐𝑓𝑓(𝑟𝑟, 𝑣𝑣)| 𝑟𝑟, 𝑣𝑣 ∈ 𝑝𝑝}

• Fluss 𝑓𝑓 in (𝐺𝐺, 𝑐𝑐) kann entlang des Pfades 𝑝𝑝 um 𝑐𝑐𝑓𝑓 𝑝𝑝 erhöht werden

Algorithmen und Datenstrukturen - Kapitel 5 90

q s

1/6

4/7 -/1

5/5

-/84/4

q s

6

3 5 1

84

4Residualnetz-werk (Gf,cf) Restkapazität

des „roten“ Pfades p ist 1

q s

-/6

4/7 -/1

4/5

-/84/4

Erhöhung um „1“ entlang p

(G,c) mit Fluss f

(G,c) mit Fluss f2

Page 91: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Beispiel (fortgesetzt)

Algorithmen und Datenstrukturen - Kapitel 5 91

q s

1/6

4/7 -/1

5/5

-/84/4

Residualnetz-werk (Gf2,cf2)

(G,c) mit Fluss f2

q s

5

3 51

84

5

q s

6/6

-/7 1/1

5/5

5/84/4

(G,c) mit Fluss f3

Achtung: „Rückwärtskante“ entlang p

q s

6

85

34

5

kein Pfad von q nach s möglich maximalen Fluss gefunden

Residualnetz-werk (Gf3,cf3)

Page 92: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Min-Cut-Max-Flow-Theorem

• Ein s-t-Schnitt (𝑆𝑆,𝑇𝑇) in einem Flussnetzwerk ist eine Partition der Knotenmenge in zwei disjunkte Mengen 𝑐𝑐 ∈ 𝑆𝑆 und 𝑐𝑐 ∈ 𝑇𝑇.

• Die Kapazität eines Schnitts ist das Gesamtgewicht der Kanten von 𝑆𝑆 nach 𝑇𝑇:

𝑐𝑐 𝑆𝑆,𝑇𝑇 = �𝑢𝑢∈𝑆𝑆,𝑣𝑣∈𝑇𝑇| 𝑢𝑢,𝑣𝑣 ∈𝐸𝐸

𝑐𝑐(𝑟𝑟, 𝑣𝑣)

• Die folgenden Aussagen sind äquivalent:– 𝑓𝑓 ist der maximale Fluss in 𝐺𝐺.

– Das Residualnetzwerk 𝐺𝐺𝑓𝑓 enthält keinen augmentierenden Pfad.

– Für mindestens einen Schnitt (𝑆𝑆,𝑇𝑇) ist der Wert des Flusses gleich der Kapazität des Schnittes: 𝑓𝑓 = 𝑐𝑐(𝑆𝑆,𝑇𝑇)

• Damit gilt: Der maximale Fluss entspricht der Kapazität des minimalen Schnittes.

Algorithmen und Datenstrukturen - Kapitel 5 92

Page 93: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Ford-Fulkerson-Methode

• Idee: Initialisiere Fluss 𝑓𝑓 mit 0Solange es einen flussvergrößernden Pfad 𝑝𝑝 gibt

erhöhe 𝑓𝑓 entlang 𝑝𝑝

• Formal ist Erhöhung von 𝑓𝑓 entlang 𝑝𝑝 für alle 𝑟𝑟, 𝑣𝑣 ∈ 𝑉𝑉 definiert durch

𝑓𝑓𝑛𝑛𝑒𝑒𝑢𝑢 𝑟𝑟, 𝑣𝑣 = 𝑓𝑓𝑎𝑎𝑎𝑎𝑎𝑎 𝑟𝑟, 𝑣𝑣 + �𝑐𝑐𝑓𝑓(𝑝𝑝)−𝑐𝑐𝑓𝑓(𝑝𝑝)

0

, 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑐𝑐 𝑟𝑟, 𝑣𝑣 𝑓𝑓𝑟𝑟𝑓𝑓 𝑝𝑝, 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑐𝑐 𝑣𝑣,𝑟𝑟 𝑓𝑓𝑟𝑟𝑓𝑓 𝑝𝑝

, 𝑐𝑐𝑐𝑐𝑛𝑛𝑐𝑐𝑐𝑐

Algorithmen und Datenstrukturen - Kapitel 5 93

Page 94: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Laufzeit der Ford-Fulkerson-Methode

• Die Laufzeit kann beliebig schlecht sein– im Beispiel: wähle flussvergrößernden Pfad

stets über mittlere Kanten sehr langsame Erhöhung des Gesamtflusses

• Falls alle Kapazitäten ganzzahlig sind, benötigtdie Methode O(f*) Iterationen, um das Problem zu lösen(dabei ist f* der Wert des maximalen Flusses)

– in jeder Iteration wird der Wert des Flusses um cf(p)≥1 erhöht– zu Beginn 0 und am Ende f*

• Verbesserung:– wähle einen kürzesten flussvergrößernden Pfad

• im Beispiel würden mittlere Kanten vermieden schnellere Terminierung

Algorithmus von Edmonds und Karp

Algorithmen und Datenstrukturen - Kapitel 5 94

q s

1000

1 1

1000

10001000

Page 95: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Edmonds-Karp-Algorithmus

• Idee: Initialisiere Fluss 𝑓𝑓 mit 0Solange es einen flussvergrößernden Pfad 𝑝𝑝 gibt

finde einen kürzesten flussvergrößernden Pfad 𝑝𝑝erhöhe 𝑓𝑓 entlang 𝑝𝑝

• Laufzeit der Methode ist polynomiell in der Größe des Netzwerks

– 𝑂𝑂( 𝑉𝑉 · 𝐸𝐸 2) = 𝑂𝑂 𝑉𝑉 5 bei spezieller Implementierung

• Weitere Verbesserungen durch Dinic (1970) führten zu– 𝑂𝑂 𝑉𝑉 2 · 𝐸𝐸 = 𝑂𝑂 𝑉𝑉 4

Algorithmen und Datenstrukturen - Kapitel 5 95

Page 96: Kapitel 5: Graphen - uni-muenchen.de · Gerichteter Graph Ein gerichteter Graph (engl. digraph = "directed graph") ist ein Paar 𝐺𝐺= (𝑉𝑉,𝐸𝐸) mit einer endlichen,

Graph-Anwendungen: Euler-Tour

• Historisches Problem („Königsberger Brückenproblem):– 1736 lebte der deutsche Mathematiker Leonhard Euler in Königsberg

• Fluß Pregel bildete dort eine Insel mit mehreren Brücken.

– Häufige Frage: Ist ein Spaziergang möglich, so dass man• schließlich wieder am Ausgangspunkt ankommt und• alle Brücken genau einmal überquert?

• Graphentheoretisch:– „Geschlossene Euler-Tour“– Existiert geschlossener, einfacher Pfad

über alle Kanten?

– Eulers Antwort: Genau dann, wenn alle Knoten von geradem Grad sind bzw. die Spalten- / Zeilensummen der Adjazenzmatrix alle gerade sind.

Algorithmen und Datenstrukturen - Kapitel 5 96

A

C

B D

0111102012021020