Kapitel 5: Graphen - uni-muenchen.deย ยท Gerichteter Graph Ein gerichteter Graph (engl. digraph =...

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

Transcript of Kapitel 5: Graphen - uni-muenchen.deย ยท Gerichteter Graph Ein gerichteter Graph (engl. digraph =...

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