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

Post on 15-Jun-2020

9 views 0 download

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

DBS

Kapitel 5: Graphen

Graph-ReprรคsentationenKรผrzeste Wege

Minimale SpannbรคumeFlussnetzwerke

Prof. Dr. Thomas Seidl

Motivation zu Graphen

โ€ข Viele reale Fragestellungen lassen sich durch Graphen darstellen

Algorithmen und Datenstrukturen - Kapitel 5 2

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

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

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

๐‘ฃ๐‘ฃ ๐‘ค๐‘ค

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

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

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

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

๐‘ฃ๐‘ฃ ๐‘ค๐‘ค

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

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

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

),(),(

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

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

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

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

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

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

... ......

......

......

...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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[๐‘–๐‘–, ๐‘—๐‘—]

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

๐‘–๐‘– ๐‘–๐‘–, ๐‘˜๐‘˜ ๐‘–๐‘– ๐‘˜๐‘˜, ๐‘—๐‘—

๐‘–๐‘–[๐‘–๐‘–, ๐‘—๐‘—]

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 ๐‘ƒ๐‘ƒ๐‘–๐‘–๐‘–๐‘–.

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

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:๐ด๐ด ๐ต๐ต ๐ถ๐ถ โˆ’โˆ’ ๐ต๐ต ๐ถ๐ถ โˆ’โˆ’ โˆ’ ๐ถ๐ถ ๐ท๐ท๐ด๐ด ๐ต๐ต โˆ’ ๐ท๐ท

๐‘ƒ๐‘ƒ๐ต๐ต:๐ด๐ด ๐ต๐ต ๐ถ๐ถ โˆ’โˆ’ ๐ต๐ต ๐ถ๐ถ โˆ’โˆ’ โˆ’ ๐ถ๐ถ ๐ท๐ท๐ด๐ด ๐ต๐ต ๐ด๐ด ๐ท๐ท

๐‘ƒ๐‘ƒ๐ถ๐ถ:๐ด๐ด ๐ต๐ต ๐ถ๐ถ ๐‘ช๐‘ชโˆ’ ๐ต๐ต ๐ถ๐ถ ๐‘ช๐‘ชโˆ’ โˆ’ ๐ถ๐ถ ๐ท๐ท๐ด๐ด ๐ต๐ต ๐ด๐ด ๐ท๐ท

๐‘ƒ๐‘ƒ๐ท๐ท:๐ด๐ด ๐ต๐ต ๐ถ๐ถ ๐ถ๐ถ๐‘ซ๐‘ซ ๐ต๐ต ๐ถ๐ถ ๐ถ๐ถ๐‘ซ๐‘ซ ๐‘ซ๐‘ซ ๐ถ๐ถ ๐ท๐ท๐ด๐ด ๐ต๐ต ๐ด๐ด ๐ท๐ท

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

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 ๐Ÿ•๐Ÿ• ๐ŸŽ๐ŸŽโˆ’๐Ÿ๐Ÿ โˆ’๐Ÿ๐Ÿ โˆ’๐Ÿ๐Ÿ โˆ’๐Ÿ–๐Ÿ–๐Ÿ๐Ÿ ๐Ÿ“๐Ÿ“ ๐Ÿ“๐Ÿ“ โˆ’๐Ÿ๐Ÿ

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๐พ๐พ

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

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

๐‘†๐‘† ๐‘ฅ๐‘ฅ

๐‘๐‘

๐‘”๐‘” ๐‘ฅ๐‘ฅ โ„Ž ๐‘ฅ๐‘ฅ

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

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=

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) ---

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)

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)

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)

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

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

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

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

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)

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

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

๐‘’๐‘’โˆˆ๐‘‰๐‘‰โ€ฒร— ๐‘‰๐‘‰โˆ’๐‘‰๐‘‰โ€ฒ๐‘๐‘ ๐‘Ÿ๐‘Ÿ

๐ธ๐ธโ€ฒ = ๐ธ๐ธโ€ฒ โˆช ๐‘Ÿ๐‘Ÿ, ๐‘ฃ๐‘ฃ๐‘‰๐‘‰โ€ฒ = ๐‘‰๐‘‰โ€ฒ โˆช ๐‘ฃ๐‘ฃ

Prim-Algorithmus: Beispiel

Algorithmen und Datenstrukturen - Kapitel 5 68

5

4

6

3

1

2

6 5

2

6

3 6

5

4

1

๐‘ฝ๐‘ฝโ€ฒ ๐‘ฌ๐‘ฌโ€ฒ

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 โˆ…

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

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

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

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

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

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๐ธ๐ธโ€ฒ = ๐ธ๐ธโ€ฒ โˆช ๐‘Ÿ๐‘Ÿ

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

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

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

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

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

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

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

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

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

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

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

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

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

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 ๐บ๐บ๐‘“๐‘“, ๐‘๐‘๐‘“๐‘“

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

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)

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

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

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

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

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