Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der...

71
Algorithmen und Datenstrukturen Werner Struckmann Wintersemester 2005/06

Transcript of Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der...

Page 1: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Algorithmen und Datenstrukturen

Werner Struckmann

Wintersemester 2005/06

Page 2: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

8. Graphen

8.1 Mathematische Grundlagen

8.2 Darstellung von Graphen

8.3 Ausgewählte Algorithmen für ungewichtete Graphen

8.4 Ausgewählte Algorithmen für gewichtete Graphen

Page 3: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Einführung

Ein Graph besteht aus Knoten (verticesoder nodes), die durch Kanten (edges)verbunden sind. Die Kanten können

◮ ungerichtet oder

◮ gerichtet

sein. Die entsprechenden Graphen heißenungerichtete bzw. gerichtete Graphen.

Graphen, deren Kanten durch eine Zahlgewichtet sind, nennt man gewichteteGraphen.

Graphen können Zyklen enthalten.

3

6 25

33

81

1

Knoten

Gewicht

Kante

Zyklus

Ungerichtetergewichteterzyklischer Graph

Gerichteterazyklischer Graph

8.1 Mathematische Grundlagen 8-1

Page 4: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

EinführungKnoten können durch eine Kante mit sich selbst verknüpft sein(Schlinge).

ungerichteter zyklischer Graph mit Schlingen

Knoten können Attribute (zum Beispiel einen Wert oder eineFarbe) besitzen.

gerichteter azyklischer gefärbter Graph

8.1 Mathematische Grundlagen 8-2

Page 5: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Anwendungsbeispiele

Ungerichtete Graphen:

◮ Kommunikationsnetz◮ Gewichte als Dauer einer Datenübertragung. Gesucht ist der

schnellste Übertragungsweg von a nach b.◮ Gewichte als Kosten einer Datenübertragung. Gesucht ist der

günstigste Übertragungsweg von a nach b.

Gerichtete Graphen:

◮ Straßennetz◮ Gewicht als Länge einer Wegstrecke. Gesucht ist die kürzeste

Strecke von a nach b.

◮ Begriffsmodellierung, semantische Netze◮ Unterbegriffe: ein „Auto“ ist ein „Fahrzeug“.

8.1 Mathematische Grundlagen 8-3

Page 6: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Anwendungsbeispiele

Gerichtete Graphen:

◮ Kontrollfluss in Programmen◮ Welche Programmabschnitte werden bei gegebener Eingabe

nicht ausgeführt?

Gerichtete azyklische Graphen:

◮ Stammbäume◮ Gesucht sind die Vorfahren von x.

◮ Vererbungshierachie in der objektorientiertenProgrammierung

8.1 Mathematische Grundlagen 8-4

Page 7: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Gerichtete und ungerichtete Graphen

◮ Ein gerichteter Graph (Digraph) G ist ein Paar (V ,E) mit:◮ V ist eine endliche Menge (Knoten, Knotenmenge).◮ E ⊆ V × V ist eine Relation auf V (Kanten, Kantenmenge).◮ Eine Kante (u, u) ∈ E heißt Schlinge.

◮ Ein ungerichteter Graph G ist ein Paar (V ,E) mit:◮ V ist eine endliche Menge (Knoten, Knotenmenge).◮ E ⊆ {{u, v} | u, v ∈ V } ist eine Menge, deren Elemente ein-

oder zweielementige Teilmengen von V sind. (Kanten,Kantenmenge).

◮ Eine einelementige Teilmenge {u} heißt Schlinge.◮ E kann als symmetrische Relation E ⊆ V × V angesehen

werden.◮ Man schreibt häufig (u, v) ∈ E statt {u, v} ∈ E.

8.1 Mathematische Grundlagen 8-5

Page 8: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Adjazenz

Es sei ein gerichteter oder ungerichteter Graph G = (V ,E)gegeben. Falls (u, v) ∈ E ist sagt bzw. schreibt man:

◮ (u, v) tritt aus u aus,

◮ (u, v) tritt in v ein,

◮ u und v sind adjazent (benachbart),

◮ u → v.

E ist die Adjazenzrelation.

8.1 Mathematische Grundlagen 8-6

Page 9: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Grad eines Knotens

Ungerichteter Graph:

◮ Der Grad eines Knotens ist die Anzahl der mit ihm in Relationstehenden Knoten.

◮ Ein Knoten mit dem Grad 0 heißt isoliert.

Gerichteter Graph:

◮ Der Ausgangsgrad eines Knotens ist die Anzahl seineraustretenden Kanten.

◮ Der Eingangsgrad eines Knotens ist die Anzahl seinereintretenden Kanten.

◮ Der Grad eines Knotens ist die Summe aus Ausgangs- undEingangsgrad.

8.1 Mathematische Grundlagen 8-7

Page 10: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Pfade

Es sei ein Graph G = (V ,E) gegeben.

◮ Ein Pfad p der Länge k in G von u ∈ V zu u′ ∈ V ist eineFolge p = (v0, v1, . . . , vk ) von Knoten mit u = v0, u′ = vk und(vi−1, vi) ∈ E, i = 1, . . . k .

◮ Der Pfad p enthält die Knoten v0, v1, . . . , vk und die Kanten(v0, v1),. . . ,(vk−1, vk ).

◮ Wenn es einen Pfad p von u ∈ V zu u′ ∈ V gibt, heißt u′ von uüber p erreichbar.

◮ Ein Pfad heißt einfach, wenn alle Knoten verschieden sind.

◮ Ein Teilpfad eines Pfads p = (v0, v1, . . . , vk ) ist eine Teilfolgebenachbarter Knoten.

8.1 Mathematische Grundlagen 8-8

Page 11: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Zyklen

◮ Ein Pfad p = (v0, v1, . . . , vk ) heißt Zyklus, wenn v0 = vk undk > 0 ist.

◮ Ein Zyklus ist einfach, wenn seine Knoten paarweiseverschieden sind.

◮ Ein Graph ohne Schlingen wird einfach genannt.

◮ Ein Graph ohne Zyklen wird als azyklisch bezeichnet.

8.1 Mathematische Grundlagen 8-9

Page 12: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Zusammenhang

◮ Ein ungerichteter Graph heißt zusammenhängend, wennjedes Knotenpaar durch einen Pfad verbunden ist.

◮ Die Zusammenhangskomponenten eines ungerichtetenGraphen sind die Äquivalenzklassen bezüglich derÄquivalenzrelation „ist erreichbar von“.

◮ Ein gerichteter Graph heißt stark zusammenhängend, wennjeder Knoten von jedem anderen Knoten aus erreichbar ist.

◮ Die starken Zusammenhangskomponenten eines gerichtetenGraphen sind die Äquivalenzklassen bezüglich derÄquivalenzrelation „sind gegenseitig erreichbar“.

8.1 Mathematische Grundlagen 8-10

Page 13: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Teilgraphen und Isomorphie

◮ Ein Graph G′ = (V ′,E′) ist ein Teilgraph von G = (V ,E), fallsV ′ ⊆ V und E′ ⊆ E gilt.

◮ Ist eine Teilmenge V ′ ⊆ V gegeben, dann ist der durch V ′

induzierte Teilgraph Graph G′ = (V ′,E′) von G = (V ,E)durch

E′ = {(u, v) ∈ E | u, v ∈ V ′}.

bestimmt.

◮ Zwei Graphen G = (V ,E) und G′ = (V ′,E′) sind isomorph,wenn es eine bijektive Abbildung f : V → V ′ mit

(u, v) ∈ E ⇔ (f(u), f(v)) ∈ E′

gibt.

8.1 Mathematische Grundlagen 8-11

Page 14: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Spezielle Graphen

◮ Ein vollständiger Graph ist ein Graph, in dem jedesKnotenpaar benachbart ist:

u, v ∈ V ⇒ (u, v) ∈ E

◮ Ein bipartiter Graph ist ein Graph, in dem die Knotenmenge Vin zwei Teilmengen V1 und V2 zerlegt werden kann, dass alleKanten zwischen V1 und V2 verlaufen:

(u, v) ∈ E ⇒ (u ∈ V1, v ∈ V2) ∨ (u ∈ V2, v ∈ V1)

8.1 Mathematische Grundlagen 8-12

Page 15: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Bäume

◮ Ein Wald ist ein azyklischer, ungerichteter Graph.

◮ Ein (freier) Baum ist ein zusammenhängender Wald.

◮ Ein (gerichteter) Baum ist ein freier Baum, in dem einer derKnoten vor den anderen ausgzeichnet ist. Dieser Knotenheißt Wurzel.

◮ In einem geordneten Baum sind die Kinder jedes Knotensgeordnet.

Mit diesen Definitionen, können wir die Begriffe Kind, Vater,Vorfahre, Höhe, Tiefe, binärer Baum, k -närer Baum, . . .graphentheoretisch interpretieren.

8.1 Mathematische Grundlagen 8-13

Page 16: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Gewichtete Graphen

◮ Ein gewichteter Graph G = (V ,E,w) besteht aus einemGraphen (V ,E) und einer Gewichtsfunktion

w : E → R,

die jeder Kante e ∈ E eine reelle Zahl w(e) als Gewichtzuordnet.

◮ Das Gewicht w(p) eines Pfads p = (v0, v1, . . . , vk ) ist dieSumme der einzelnen Kantengewichte:

w(p) :=k−1∑

i=0

w((vi , vi+1))

8.1 Mathematische Grundlagen 8-14

Page 17: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Kürzeste Pfade

◮ Ungewichtete Graphen: Ein Pfad minimaler Länge zwischenzwei Knoten heißt kürzester Pfad zwischen diesen Knoten.

◮ Gewichtete Graphen: Ein Pfad minimalen Gewichts zwischenzwei Knoten heißt kürzester Pfad zwischen diesen Knoten.

◮ Die Länge bzw. das Gewicht des kürzesten Pfades zwischenzwei Knoten ist die Distanz der beiden Knoten.

◮ Kürzeste Pfade müssen nicht existieren (Beispiel: es existiertein Zyklus mit negativem Gewicht, der beliebig oft durchlaufenwerden kann).

◮ Kürzeste Pfade sind im Allgemeinen nicht eindeutig bestimmt.

8.1 Mathematische Grundlagen 8-15

Page 18: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Erweiterungen

◮ Ein Multigraph ist ein Graph, der Mehrfachkanten enthaltenkann.

◮ Eine Kante in einem Hypergraphen kann mehr als zweiKnoten verbinden.

8.1 Mathematische Grundlagen 8-16

Page 19: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Nützliche Funktionen

Bei gerichteten Graphen:

◮ Ausgangskanten: ak : V → P(E),ak(u) = {(u, v) | (u, v) ∈ E}

◮ Eingangskanten: ek : V → P(E),ek(u) = {(v , u) | (v , u) ∈ E}

◮ Ausgangsgrad: ag : V → N0,ag(u) = |ak(u)|

◮ Eingangsgrad: eg : V → N0,eg(u) = |ek(u)|

a b

c

def

g

ak(a) = {(a, g), (a, b)}ek(g) = {(a, g), (b, g), (f , g)}

8.2 Darstellung von Graphen 8-17

Page 20: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Nützliche Funktionen

◮ Nachfolgerknoten:nk : V → P(V),nk(u) = {v | (u, v) ∈ E}

◮ Vorgängerknoten: vk : V → P(V),vk(u) = {v | (v, u) ∈ E}

a b

c

def

g

nk(a) = {g, b}

8.2 Darstellung von Graphen 8-18

Page 21: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Möglichkeiten zur Speicherung von Graphen

◮ Kantenlisten

◮ Knotenlisten

◮ Adjazenzmatrizen

◮ Adjazenzlisten

8.2 Darstellung von Graphen 8-19

Page 22: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Kantenlisten

◮ Nummerierung der Knoten von 1 bis|V | = n

◮ Speicherung: |V |, |E |, Paare (a, b) mit(a, b) ∈ E. Es werden 2 + |E | ∗ 2Werte unsortiert gespeichert.

◮ Einfügen von Kanten und Knoten:O(1)

◮ Löschen von Kanten erfordert einDurchsuchen der Liste: O(|E |)

◮ Löschen von Knoten erfordert einerneutes Nummerieren der Knotenund ggf. Löschen von Kanten: O(|E |)

1 2

3

456

7

Kantenliste: 7, 9, 1, 2, 1, 7, 2, 7,3, 2, 3, 4, 3, 5, 4, 5, 5, 6, 6, 7

8.2 Darstellung von Graphen 8-20

Page 23: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Knotenliste

◮ Nummerierung der Knoten von 1 bis|V | = n

◮ Speicherung: |V |, |E |, (ag(v), nk(v))mit v ∈ V aufsteigend sortiert. Eswerden 2 + |V |+ |E |Wertegespeichert.

◮ Einfügen von Knoten: O(1)

◮ Einfügen und Löschen von Kantenerfordert ein Durchsuchen der Liste:O(|E |+ |V |)

◮ Löschen von Knoten erfordert einerneutes Nummerieren der Knotenund ggf. Löschen von Kanten:O(|E |+ |V |)

1 2

3

456

7

Knotenliste: 7, 9, 2, 2, 7, 1, 7, 3,2, 4, 5, 1, 5, 1, 6, 1, 7, 0

8.2 Darstellung von Graphen 8-21

Page 24: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Adjazenzmatrizen

Ein Graph G = (V ,E) mit |V | = n wird als quadratischen × n-Matrix a von booleschen Werten gespeichert. Es gilt

a[i, j] = true⇔ (i, j) ∈ E.

Beispiel für einen gerichteten Graphen:

3 4

1 2

1 1 0 10 0 0 10 0 1 10 0 0 0

Bei ungerichteten Graphen braucht aus Symmetriegründen nureine Hälfte der Matrix gespeichert zu werden.

8.2 Darstellung von Graphen 8-22

Page 25: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Adjazenzliste

◮ Nummerierung der Knoten von 1 bis |V |.◮ Implementierung durch |V |+ 1 Listen:

◮ Basisliste: Liste aller Knoten des Graphen.◮ Pro Knoten: Liste der Nachfolger des Knotens.

1 2

3

456

7

1

2

· · ·

7

2 7

7

8.2 Darstellung von Graphen 8-23

Page 26: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Vergleich der Implementierungen

Es sei |V | = n, |E | = m.

Kanten- Knoten- Adjazenz- Adjazenz-liste liste matrix liste

Speicherbedarf O(m) O(n + m) O(n2) O(n + m)

Kante Einfügen O(1) O(n + m) O(1) O(n)∗

Kante Löschen O(m) O(n + m) O(1) O(n + m)∗

Knoten Einfügen O(1) O(1) O(n2) O(1)Knoten Löschen O(m) O(n + m) O(n2) O(n + m)

∗) für die hier gegebene Implementierung

8.2 Darstellung von Graphen 8-24

Page 27: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Übersicht

In diesem Abschnitt wollen wir beispielhaft einige Algorithmen fürungewichtete Graphen vorstellen.

◮ Systematisches Durchsuchen eines Graphen◮ Breitensuche (breadth-first search)◮ Tiefensuche (depth-first search)

◮ Zyklenfreiheit

◮ Topologisches Sortieren

◮ Erreichbarkeit

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-25

Page 28: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Breitensuche

Besuch aller Knoten eines Graphen G = (V ,E), die von einemStartknoten s erreichbar sind.

◮ Es wird von s ausgegangen.

◮ Zuerst werden alle von s über eine Kante erreichbarenKnoten besucht.

◮ Dann alle über zwei Kanten erreichbaren Knoten.

◮ usw.

Startknoten

1. Iteration

2. Iteration

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-26

Page 29: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Breitensuche

◮ Iterative Kontrollstruktur

◮ Schlange Q zur Speicherung der gerade bearbeiteten Knotenin Reihenfolge der Iterationsschritte

◮ Drei Verzeichnisse (Abbildungen, Dictionaries)◮ d : V → N0 bildet jeden Knoten auf seine Entfernung vom

Startknoten ab.◮ p : V → V bildet jeden Knoten auf den Vorgängerknoten ab,

von dem ausgehend er erreicht worden ist. p ergibt nach derAbarbeitung einen Breitensuchbaum.

◮ c : V → {weiß, schwarz, grau} ordnet jedem Knoten eineFarbe abhängig von seinem Bearbeitungszustand zu:

◮ weiß: noch unentdeckt,◮ grau: Entfernung bereits bestimmt,◮ schwarz: abgearbeitet.

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-27

Page 30: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Breitensuche

proc BFS(G,s) begin

foreach u ∈ V \ {s} do

c(u) ← weiß; d(u) ← ∞; p(u) ← nil od;

c(s) ← grau; d(s) ← 0; p(s) ← nil;

Q ← empty;

enter(Q,s);

while! isempty(Q) do

u ← front(Q); leave(Q);

foreach v ∈ nk(u) do

if c(v) = weiß then

c(v) ← grau; d(v) ← d(u)+1;

p(v) ← u; enter(Q,v) fi; od;

c(u) ← schwarz; od;

end

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-28

Page 31: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Breitensuche

v

r

w

s

x

t

y

u

q: sv

r

w

s

x

t

y

u

q: w, rv

r

w

s

x

t

y

u

q: r, t, x

v

r

w

s

x

t

y

u

q: t, x, v

v

r

w

s

x

t

y

u

q: x, v, uv

r

w

s

x

t

y

u

q: v, u, y

v

r

w

s

x

t

y

u

q: u, yv

r

w

s

x

t

y

u

q: yv

r

w

s

x

t

y

u

q: leer

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-29

Page 32: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Breitensuche

Satz: Es sei G = (V ,E) ein gerichteter oder ungerichteter Graph,auf dem die Prozedur BFS für einen Startknoten s ∈ V ausgeführtwird.

1. Die Prozedur entdeckt jeden Knoten v ∈ V , der von s auserreichbar ist. Bei der Terminierung ist d(v) gleich der Distanzvon v von s für alle v ∈ V .

2. Die Laufzeit der Breitensuche liegt in O(|V |+ |E |), das heißt,die Laufzeit ist linear in der Größe der Adjazenzliste.

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-30

Page 33: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Breitensuche

Der implizit über das Verzeichnis p erzeugte Breitensuchbaum ist

v

r

w

s

x

t

y

u

Die Pfade von jedem Knoten in diesem Baum zum Startknotenentsprechen kürzesten Pfaden in G.

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-31

Page 34: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Tiefensuche

Besuch aller Knoten eines Graphen G = (V ,E).

◮ Es wird von einem Startknoten s ausgegangen.

◮ Es wird rekursiv so weit wie möglich auf einem Pfadvorangeschritten.

◮ Danach wird zu einer Verzweigung mit einem noch nichtbesuchten Knoten zurückgegangen (Backtracking).

h

i

a

g

j

b

f

c

e

d1 2

3

4

5

6 7

8

9

10

11 12

1314

1516

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-32

Page 35: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Tiefensuche

◮ Rekursive Kontrollstruktur

◮ Prozeduren DFS(G) und DFS-visit(u)

◮ Zeitstempel◮ Vier Verzeichnisse (Abbildungen, Dictionaries)

◮ d : V → N0 Beginn der Bearbeitung eines Knotens◮ f : V → N0 Ende der Bearbeitung eines Knotens◮ p : V → V Vorgängerknoten◮ c : V → {weiß, schwarz, grau} wie oben

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-33

Page 36: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Tiefensuche

proc DFS(G) begin

foreach u ∈ V do

c(u) ← weiß; p(u) ← nil od;

zeit ← 0;

foreach u ∈ V do

if c(u) = weiß then

DFS-visit(u) fi; od;

end

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-34

Page 37: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Tiefensuche

proc DFS-visit(u): begin

c(u) ← grau;

zeit ← zeit+1;

d(u) ← zeit;

foreach v ∈ nk(u) do

if c(v) = weiß then

p(v) ← u;

DFS-visit(v) fi; od;

c(u) ← schwarz;

zeit ← zeit+1;

f(u) ← zeit;

end

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-35

Page 38: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Tiefensuche

x

/

u

1/

y

/

v

/

z

/

w

/

x

/

u

1/

y

/

v

2/

z

/

w

/

x

/

u

1/

y

3/

v

2/

z

/

w

/

x

4/

u

1/

y

3/

v

2/

z

/

w

/

x

4/

u

1/

y

3/

v

2/

z

/

w

/

B

x

4/5

u

1/

y

3/

v

2/

z

/

w

/

B

x

4/5

u

1/

y

3/6

v

2/

z

/

w

/

B

x

4/5

u

1/

y

3/6

v

2/7

z

/

w

/

B

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-36

Page 39: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Tiefensuche

x

4/5

u

1/

y

3/6

v

2/7

z

/

w

/

F B

x

4/5

u

1/8

y

3/6

v

2/7

z

/

w

/

F B

x

4/5

u

1/8

y

3/6

v

2/7

z

/

w

9/

F B

x

4/5

u

1/8

y

3/6

v

2/7

z

/

w

9/

F BC

x

4/5

u

1/8

y

3/6

v

2/7

z

10/

w

9/

F BC

x

4/5

u

1/8

y

3/6

v

2/7

z

10/

w

9/

F BC

B x

4/5

u

1/8

y

3/6

v

2/7

z

10/11

w

9/

F BC

B x

4/5

u

1/8

y

3/6

v

2/7

z

10/11

w

9/12

F BC

B

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-37

Page 40: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Tiefensuche

Der implizit über das Verzeichnis p erzeugte Tiefensuchwald ist

x

4/5

u

1/8

y

3/6

v

2/7

z

10/11

w

9/12

F BC

B

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-38

Page 41: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Tiefensuche

Klassifikation der Kanten:

1. Baumkanten sind Kanten im Tiefensuchwald.

2. Rückwärtskanten B sind Kanten, die einen Knoten mit einemVorfahren im Tiefensuchwald verbinden.

3. Vorwärtskanten F sind diejenigen Nichtbaumkanten, die einenKnoten mit einem Nachfahren im Tiefensuchwald verbinden.

4. Querkanten C sind alle übrigen Kanten. Sie können zwischenverschiedenen Tiefensuchbäume verlaufen.

Bei einer Tiefensuche auf einem ungerichteten Graphen ist jedeKante eine Baumkante oder eine Rückwärtskante.

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-39

Page 42: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Zyklenfreiheit

Mithilfe der Tiefensuche können Zyklen in gerichteten Graphenermittelt werden. Es gilt:

Ein gerichteter Graph G ist genau dann azyklisch, wenn derTiefensuchalgorithmus auf G keine Rückwärtskanten liefert.

Beweis: s. Cormen et al., Seite 554.

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-40

Page 43: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Topologisches Sortieren

◮ Gegeben sei ein gerichteter azyklischer Graph G = (V ,E).Solche Graphen werden als DAG (directed acyclic graph)bezeichnet.

◮ Eine topologische Sortierung von G ist eine lineareAnordnung seiner Knoten mit der Eigenschaft, dass u vor vliegt, wenn es einen Pfad von u nach v gibt.

◮ Gesucht ist ein Algorithmus, der zu einem DAG G = (V ,E)eine topologische Sortierung seiner Knotenmenge Vberechnet.

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-41

Page 44: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Topologisches Sortieren

Beispiel: Gesucht ist die Reihenfolge beim Ankleiden. NachFestlegung der Reihenfolge einzelner Kleidungsstücke entstehtfolgender Graph:

Uhr

Gurtel

Hose

Unterhose

Jacke

Fliege

Hemd

Schuhe

Socken

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-42

Page 45: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Topologisches Sortieren

Mit Tiefensuche kann für jeden Knoten die Endzeit seinerBearbeitung bestimmt werden. Sie ergibt eine topologischeSortierung.

Ist die Bearbeitung einesKnotens abgeschlossen, sowird er am Kopf der zu Beginnleeren Ergebnisliste eingefügt.Die Ergebnisliste gibt dieSortierung an.Reihenfolge: Socken (18),Unterhose (16), Hose (15),Schuhe (14), Uhr (10), Hemd(8), Gürtel (7), Fliege (5),Jacke (4)

Uhr

Gurtel

Hose

Unterhose

9/10

6/7

12/15

11/16

Jacke

Fliege

Hemd

Schuhe

Socken

3/4

2/5

1/8

13/14

17/18

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-43

Page 46: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Floyd-Warshall-AlgorithmusEs soll die reflexive, transitive Hülle einer Relation bestimmtwerden. Dieses Problem entspricht dem Erreichbarkeitsproblem ineinem Graphen.

3 4

1 2

0 1 0 00 0 0 10 0 0 10 0 0 0

1 1 0 10 1 0 10 0 1 10 0 0 1

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-44

Page 47: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Floyd-Warshall-AlgorithmusEs sei V = {1, . . . , n}. Die Relation E ⊆ V × V liege alsAdjazenzmatrix r vor. Für 1 ≤ i, j ≤ n sei

r [i, j] =

true falls (i, j) ∈ E

false sonst

func FloyWars(r: bool [n,n]): bool [n,n] begin

var i,j,k: int;

for i ← 1 to n do r[i,i] ← true; od;

for k ← 1 to n do

for i ← 1 to n do

for j ← 1 to n do

r[i,j] ← r[i,j] ∨

(r[i,k] ∧ r[k,j]);

od; od; od;

return r;

end

8.3 Ausgewählte Algorithmen für ungewichtete Graphen 8-45

Page 48: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Übersicht

In diesem Abschnitt wollen wir beispielhaft einige Algorithmen fürgewichtete Graphen vorstellen.

◮ Minimale Spannbäume◮ Algorithmus von Kruskal◮ Algorithmus von Prim

◮ Kürzeste Pfade von einem Startknoten◮ Algorithmus von Dijkstra◮ Bellmann-Ford-Algorithmus

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-46

Page 49: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Minimale Spannbäume◮ Gegeben sei ein gewichteter Graph G = (V ,E,w).◮ Gesucht ist eine azyklische Teilmenge T ⊆ E, die alle Knoten

verbindet und deren Gesamtgewicht

w(T) =∑

e∈T

w(e)

minimal ist.◮ Eine Kantenmenge, die azyklisch ist und alle Knoten

verbindet, ist ein Baum, der Spannbaum genannt wird.◮ Es ist also ein minimaler Spannbaum gesucht.

4

8 6

2

5 7 6

3

2

3 3

5

4

6

◮ Dieser Baum ist im Allgemeinen nicht eindeutig bestimmt.

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-47

Page 50: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Basisalgorithmus

◮ Der Algorithmus verwaltet eine Kantenmenge A , die denminimalen Spannbaum Kante für Kante aufbaut.

◮ A ist stets Teilmenge eines minimalen Spannbaums.

◮ Eine Kante e ∈ E, die zu A hinzugefügt werden kann, ohnedie Eigenschaft zu verletzen, dass A Teilmenge einesminimalen Spannbaums ist, heißt sichere Kante für A .

proc MST-Basis(G) begin

A ← ∅;

while A bildet keinen Spannbaum do

bestimme eine Kante e ∈ E,die sicher für A ist;

A ← A ∪ {e};

od;

return A;

end

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-48

Page 51: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Basisalgorithmus

Satz: Es sei G = (V ,E) ein zusammenhängender, gewichteterGraph. A sei eine Teilmenge eines minimalen Spannbaums undC = (VC ,EC) eine Zusammenhangskomponente aus dem WaldGA = (V ,A). Dann gilt: Falls e ∈ E eine Kante mit minimalenGewicht ist, die C mit einer anderen Komponente von GA

verbindet, dann ist e sicher für A .

Beweis: s. Cormen, S. 569 f.

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-49

Page 52: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Operationen für disjunkte Mengen

◮ MakeSet(x)

erzeugt die einelementige Menge {x}. x darf nicht bereits ineiner anderen Menge enthalten sein.

◮ Union(x,y)

bildet die Vereinigungsmenge x ∪ y. Es wird x ∩ y = ∅vorausgesetzt.

◮ FindSet(x)

liefert einen Zeiger auf den Repäsentanten der eindeutigbestimmten Menge, die x enthält.

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-50

Page 53: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Algorithmus von Kruskal

◮ Selektiere fortwährend eine verbleibende Kante mitgeringstem Gewicht, die keinen Zyklus erzeugt, bis alleKnoten verbunden sind (Kruskal, 1956).

◮ Eine eindeutige Lösung ist immer dann vorhanden, wenn alleGewichte verschieden sind.

4

8 6

2

5 7 6

3

23

3

5

4

6

Nach Wahl der Kanten 2, 2, 3 und 3 darf die verbleibende 3 nichtgewählt werden, da sonst ein Zyklus entstünde.

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-51

Page 54: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Algorithmus von Kruskal

proc MST-Kruskal(G) begin

A ← ∅;

foreach v ∈ V do MakeSet(v) od;

sortiere die Kanten aufsteigend nach

ihrem Gewicht;

foreach (u,v) ∈ E do

if FindSet(u) , FindSet(v) then

A ← A ∪ {(u,v)}

UnionSet(FindSet(u), FindSet(v));

fi;

od;

return A;

end

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-52

Page 55: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Algorithmus von Kruskal

◮ A ist zu jedem Zeitpunkt ein Wald, dessen Komponentennach und nach zu einem minimalen Spannbaum verbundenwerden.

◮ Die Laufzeit hängt von der Implementierung der disjunktenMengen ab.

◮ Bei einer geeigneten Realisierung der disjunkten Mengenliegt die Laufzeit des Algorithmus von Kruskal in O(|E | log |V |).

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-53

Page 56: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Algorithmus von Prim

◮ Beim Algorithmus von Prim bildet die Kantenmenge A stetseinen Baum.

◮ Der Baum startet bei einem beliebigen Wurzelknoten undwächst, bis er V aufspannt.

◮ In jedem Schritt wird eine Kante hinzugefügt, die A mit einemisolierten Knoten von GA = (V ,A) verbindet und diebezüglich dieser Eigenschaft minimal ist.

◮ Der Algorithmus verwendet zur Verwaltung der Knoten eineMin-Prioritätswarteschlange Q, die auf einem Attributschlüssel basiert. Für jeden Knoten v ist schlüssel(v) daskleinste Gewicht aller Kanten, die v mit einem Knoten desBaums verbinden.

◮ p(v) bezeichnet den Vater von v.

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-54

Page 57: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Algorithmus von Prim

proc MST-Prim(G,r) begin

foreach u ∈ V do

schlüssel(u) ← ∞; p(u) ← nil; od;

schlüssel(r) ← 0;

Q ← V;

while Q , ∅ do

u ← ExtractMin(Q);

foreach v ∈ nk(u) do

if v ∈ Q und w(u,v) < schlüssel(v)

then p(v) ← u;

schlüssel(v) ← w(u,v); fi;

od;

od;

end

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-55

Page 58: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Algorithmus von Prim

◮ Die Laufzeit des Algorithmus von Prim hängt von derImplementierung der Min-Prioritätswarteschlange Q ab.

◮ Die Anweisung schlüssel(v)← w(u,v) ist beispielsweiseeine Decrease-Operation.

◮ Wenn Q als binärer Min-Heap realisiert wird, liegt die Laufzeitdes Algorithmus von Prim in O(|E | log |V |). Dies entspricht derLaufzeit des Algorithmus von Kruskal.

◮ Durch Verwendung von so genannten Fibonacci-Heaps kanndie Laufzeit des Algorithmus von Prim auf O(|E |+ |V | log |V |)verbessert werden.

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-56

Page 59: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Problem der kürzesten Pfade bei einem Startknoten

◮ Gegeben ist ein gewichteter Graph G = (V ,E,w) und einStartknoten s ∈ V .

◮ Gesucht ist für jeden Knoten v ∈ V ein Pfad p = (v0, . . . , vk )von s = v0 nach v = vk , dessen Gewicht

w(p) =k∑

i=1

w(vi−1, vi)

minimal wird. Falls kein Pfad von s nach v existiert, sei dasGewicht ∞.

◮ Die Gewichte können im Allgemeinen negativ sein.

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-57

Page 60: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Problem der kürzesten Pfade bei einem Startknoten

Beispiel: Bestimme den kürzesten Weg von Frankfurt nach Celle

Erfurt Celle

Frankfurt Braunschweig

Darmstadt

Augsburg

38 2

6

1

3

2

329

9

9

9

8

4

Der kürzester Weg ist (Frankfurt, Augsburg, Braunschweig, Celle).Er hat das Gewicht 6.

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-58

Page 61: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Bellmann-Ford-Algorithmus

◮ Der Algorithmus verwendet so genannte Relaxationen undbestimmt so immer kleiner werdende Schätzungen d(v) fürdas Gewicht eines kürzesten Pfads vom Startknoten s aus zuallen Knoten v ∈ V , bis er das tatsächliche Gewicht erreichthat.

◮ Der Algorithmus gibt genau dann wahr zurück, wenn derGraph keine Zyklen mit negativem Gewicht enthält, die von saus erreichbar sind.

◮ p(v) ist wie bisher der Vaterknoten von v.

◮ Der Algorithmus führt |V | − 1 Durchläufe über die Kanten desGraphen aus.

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-59

Page 62: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Bellmann-Ford-Algorithmus

Initialisierung:

proc Init(G,s) begin

foreach v ∈ V do

d(v) ← ∞;

p(v) ← nil; od;

d(s) ← 0;

end

Relaxation:

proc Relax(u,v,w) begin

if d(v) > d(u) + w(u,v)

then d(v) ← d(u) + w(u,v);

p(v) ← u; fi;

end

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-60

Page 63: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Bellmann-Ford-Algorithmus

proc Bellmann-Ford(G, s) boolean begin

Init(G,s);

for i ← 1 to |V| - 1 do

foreach (u,v) ∈ E do

Relax(u,v,w); od; od;

foreach (u,v) ∈ E do

if d(v) > d(u) + w(u,v)

then return false; fi; od;

return true;

end

Die Laufzeit des Bellmann-Ford-Algorithmus liegt in O(|E | · |V |).

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-61

Page 64: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Algorithmus von Dijkstra

◮ Der Algorithmus von Dijkstra löst das Problem der kürzestenPfade bei einem Startknoten, falls alle Gewichte nichtnegativsind.

◮ Wir setzen daher w(e) ≥ 0 für alle e ∈ E voraus.

◮ Die Laufzeit des Dijkstra-Algorithmus ist bei guterImplementierung besser als die desBellmann-Ford-Algorithmus.

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-62

Page 65: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Algorithmus von Dijkstra

◮ Der Dijkstra-Algorithmus verwaltet eine Menge S von Knoten,deren endgültige Gewichte der kürzesten Pfade vomStartknoten aus bereits bestimmt wurden.

◮ Der Algorithmus wählt in jedem Schritt denjenigen Knotenu ∈ V \ S mit der kleinsten Schätzung des kürzesten Pfadsaus, fügt u zu S hinzu und relaxiert alle aus u austretendenKanten

◮ In der Implementierung wird eine Min-PrioritätswarteschlangeQ für Knoten verwendet. Dabei dienen die d-Werte alsSchlüssel.

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-63

Page 66: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Algorithmus von Dijkstra

proc Dijkstra(G, s) begin

Init(G,s);

S ← ∅;

Q ← V;

while Q , ∅ do

u ← ExtractMin(Q);

S ← S ∪ {u};

foreach v ∈ nk(u)

Relax(u,v,w); od; od;

end

Die Laufzeit des Dijkstra-Algorithmus hängt von derImplementierung der Min-Prioritätswarteschlange Q ab. Bei guterImplementierung von Q liegt die Laufzeit des Dijkstra-Algorithmusin O(|E |+ |V | · log |V |).

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-64

Page 67: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Algorithmus von Dijkstra

0s

y

t

z

x

10

5

9

2

3 2

1

7

6 4

Q = [s,t,x,y,z]

0s

5y

10t

z

x

10

5

9

2

3 2

1

7

6 4

Q = [y,t,x,z]

0s

5y

8t

7z

14x

10

5

9

2

3 2

1

7

6 4

Q = [z,t,x]

0s

5y

8t

7z

13x

10

5

9

2

3 2

1

7

6 4

Q = [t,x]

0s

5y

8t

7z

9x

10

5

9

2

3 2

1

7

6 4

Q = [x]

0s

5y

8t

7z

9x

10

5

9

2

3 2

1

7

6 4

Q = []

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-65

Page 68: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Ausblick

Die Graphentheorie ist ein umfangreiches Gebiet, in dem vieleweitere Fragestellungen untersucht werden. Wir stellen drei davonkurz vor:

◮ Problem des Handlungsreisenden,

◮ planare Graphen,

◮ Färbungen von Graphen.

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-66

Page 69: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Problem des Handlungsreisenden◮ Gegeben seien n durch Straßen verbundene Städte mit

Reisekosten c(i, j) zwischen je zwei Städten i und j,1 ≤ i, j ≤ n.

◮ Gesucht ist die billigste Rundreise, die jede Stadt genaueinmal besucht (Traveling Salesman Problem, TSP).

Erfurt Celle

Frankfurt Braunschweig

Darmstadt

Augsburg

38 2

6

1

3

2

329

9

9

9

8

4

Die billigste Rundreise kostet 13 Einheiten.

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-67

Page 70: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Planare Graphen

◮ Gegeben sei ein beliebiger Graph G. Lässt sich G planarzeichnen, das heißt, ohne sich schneidende Kanten?

◮ Im Beispiel unten ist dies möglich, im Allgemeinen jedochnicht.

◮ Anwendung: Chip- oder Leiterplattendesign. Leiterbahnensollen möglichst kreuzungsfrei gestaltet werden.

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-68

Page 71: Algorithmen und Datenstrukturen - TU Braunschweig · Grad eines Knotens Ungerichteter Graph: Der Grad eines Knotens ist die Anzahl der mit ihm in Relation stehenden Knoten. Ein Knoten

Färbungen von Graphen◮ Gegeben sei ein Graph G. Die Knoten von G sollen derart

gefärbt werden, dass benachbarte Knoten verschiedeneFarben besitzen. Wie viele Farben werden benötigt?

◮ Im Beispiel unten reichen bereits drei Farben. Für planareGraphen werden im Allgemeinen vier Farben benötigt. DiesesErgebnis wurde 1976 von K. Appel und W. Haken gezeigt(Vierfarbenproblem). Der Beweis war sehr umfangreich undcomputergestützt.

◮ Anwendungen: Einfärben von Landkarten (Knoten , Land,Kante , Grenze), Vergabe überschneidungsfreierKlausurtermine (Knoten , Fach, Kante , beide Fächerwerden vom gleichen Studenten gehört, Farbe , Termin)

8.4 Ausgewählte Algorithmen für gewichtete Graphen 8-69