Kapitel 5: Graphen - uni-muenchen.deย ยท Gerichteter Graph Ein gerichteter Graph (engl. digraph =...
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