Nachtest für Ausnahmefälle
Kap. 6.4: Elementare Graphalgorithmen
Kap. 6.5: Minimale Spannbäume
Professor Dr. Petra Mutzel
Lehrstuhl für Algorithm Engineering, LS11
Fakultät für Informatik, TU Dortmund
20. VO
DAP2
SS
2008
Petra Mutzel
24. Juni 2008
DAP2 SS08
1
Anmeldung zur Klausur
25.07.2008 um 9:00 Uhr
Informatik AI/KI Bacc+Diplom: BOSS System
Informationstechnik Diplom: bis 20.06.08: online
Elektrotechnik Diplom: direkt bei uns
Physik Bacc/Diplom: ihr Dekanat
Datenanalyse und Datenmanagement / Statistik
Bacc/Diplom: ihr eigenes Prüfungsamt
• Mathematik Bacc/Diplom: erst ab 1.7. bekannt
(wahrscheinlich BOSS System)
• Lehramt, BaMaLa: direkt bei uns
DAP2 SS08
2
DAP2 SS08
4
• Topologisches Sortieren
• Minimale Spannbäume
3
Petra Mutzel
Algorithmus BFS(s)
Sei G=(V,E) ungerichteter Graph, s,u,v: Knoten
Methode:
(1) Starte am Knoten u:=s. Sei Q:=∅
eine
Queue.
(2) Für alle Knoten v∈N(u) // erforsche Knoten u
(3) Falls wir v zum ersten Mal sehen:
(4)
markiere v als „gesehen“
(5)
dist(v):=dist(u)+1; merke Vorgänger;
(6)
hänge v hinten an Q an.
(7) Sei u der nächste Knoten in Q. Gehe zu (2)
(1) for all v∈V \ {s} do {
marked[v]:=0; dist[v]:=∞}
(2) Q.put(s); marked[s]:=1; dist[s]:=π[s]:=0
(3) while not Q.ISEMPTY() do {
(4) u:=Q.GET()
(5) for all v∈N(u)
do
{
(6) if not
marked[v]
then
{
(7) Q.Put(v)
(8)
marked[v]:=1
(9)
dist[v]:=dist[u]+1; π[v]:=u
(10)
}
}
}
dist(v) enthält den graphentheoretischen Abstand
von u nach v; π(v) den Vorgänger des kürz. Weges
DAP2 SS08
DAP2 SS08
• Kurzer Rückblick: BFS / DFS
Breitensuche (BFS)
Petra Mutzel
Petra Mutzel
Überblick
•
•
•
•
•
Petra Mutzel
• Di 1. Juli 2008, 10:15 Uhr, OH14, R. 202
• Anmeldung bis 26. Juni erforderlich via Email an
Carsten Gutwenger
• Stoff: Alles bis inkl. Hashing (inkl.1.-10.
Übungsblatt)
• Teilnahmevoraussetzungen:
• Attest/Entschuldigt beim 1. oder 2. Übungstest
• oder besondere Härtefälle anerkannt in meiner
Sprechstunde Di 24.6.08,14:15 Uhr-15:15 Uhr
5
Petra Mutzel
DAP2 SS08
6
1
Algorithmus DFS(G)
BFS-Baum vs. DFS-Baum
Sei G=(V,E) ungerichteter Graph, v,w: Knoten
BFS-Baum
(1) for all v∈V do {
marked[v]:=0; π[v]:=nil}num=0}
(2) for all v∈V do {
(3) if not
marked[v] then DFS-VISIT(v)
(4) }
(5) procedur DFS-VISIT(Node v)
(6) marked[v]:=1 num=num+1; dfsnum=num
(7) for all w∈N(v)
do
(8) if not
marked[w]
then {
(9)
π[w]:=v
DFS-Nummer gibt
(10)
DFS-VISIT(w)
die Reihenfolge der
(11)
} besuchten Knoten an
1
1
2
3
2
3
4
DFS-Baum
6
7
5
DFS-Nummer gibt die Reihenfolge der besuchten Knoten an
Modellierung von Abhängigkeiten
2.
3.
Dachstuhl
Mauern
Achtung: in diesem Abschnitt
gerichtete Graphen!
1.
Baugrube
4.
→
DAP2 SS08
5.
Fenster
Dach eindecken
gerichteter Graph
Kante (x,y) ⇒ Aufgabe x muss abgeschlossen
werden, bevor mit y angefangen werden kann
9
Petra Mutzel
DAG
DAP2 SS08
10
Topologisches Sortieren
Grundvoraussetzung:
Topologisches Sortieren
Graph ist azyklisch!
(also keine zyklischen Abhängigkeiten)
Gegeben: DAG G = (V,A)
Gesucht:
Definition:
Ein DAG (directed acyclic graph) ist ein
gerichteter Graph, der keinen (gerichteten)
Kreis enthält.
Petra Mutzel
3
Höhe eindeutig
Kap. 6.4.3 Topologisches Sortieren
Petra Mutzel
2
DAP2 SS08
v1
11
v2
eine Sortierung v1,…,vn der Knoten
von G mit i<j für alle (vi,vj) ∈ A
v3
v4
v5
v6
Petra Mutzel
v7
v8
v9
DAP2 SS08
v10
12
2
Quellen & Senken
Warum ist dies nicht mit BFS lösbar?
2.
3.
• Eine Quelle ist ein Knoten ohne eingehende Kanten
• Eine Senke ist ein Knoten ohne ausgehende Kanten
Dachstuhl
Mauern
1.
Baugrube
4.
5.
Fenster
Dach eindecken
graphentheoretische Distanz von Baugrube zu
Fenster = 1 (BFS), aber Fenster darf erst nach
Mauer ausgeführt werden
Petra Mutzel
DAP2 SS08
Quelle
Senke
13
Petra Mutzel
DAP2 SS08
14
Algorithmus
Beobachtung:
Jeder (nicht-leere) DAG G =(V,A) hat mindestens
eine Quelle und eine Senke.
Idee:
Wähle immer Quelle und entferne sie dann
Beweis: Annahme: G hat keine Senke
• Verfolge von u1 an immer ausgehende Kanten
pi := u1,u2,…,ui solange bis i > |V| oder keine
ausgehende Kante mehr existiert
• Falls i > |V| ein Knoten zweimal auf pi
• Kreis! Widerspruch!
while G ist nicht leer do
Wähle eine Quelle s in G und gib sie aus
G := G - s
end while
• Analog für Quelle
Petra Mutzel
DAP2 SS08
15
Petra Mutzel
Verbesserungen
Müssen wir Knoten wirklich löschen?
• Nein!
Verwalte Eingangsgrad in Knotenfeld indeg.
DAP2 SS08
16
Algorithmus TopSort
Wie finden wir effizient eine Quelle?
• Wird v gelöscht, dann können nur Zielknoten
w von Kanten (v,w) neu zu Quellen werden.
• Genügt ausgehende Nachbarmenge A -(v) zu
betrachten.
Petra Mutzel
DAP2 SS08
17
(1)
(2)
var Queue Q
var int indeg[V]
(3)
(4)
(5)
(6)
(7)
// Initialisierung
for all v ∈ V do
{
indeg[v] := d +(v)
if indeg[v] = 0 then Q.PUT(v)
}
Petra Mutzel
DAP2 SS08
18
3
Beispiel: TopSort
Algorithmus TopSort (2)
(8) // Hauptschleife
(9) while not Q.ISEMPTY() do {
(10)
v := Q.GET()
(11)
Gib v aus
(12)
for all (v,u) ∈ A-(v)
do
{
(13)
indeg[u] := indeg[u] - 1
(14)
if indeg[u] = 0 then Q.PUT(u)
(15)
}
(16) }
a
b
c
d
Q
Petra Mutzel
DAP2 SS08
19
Analyse der Laufzeit
a
e
j
b
f
c
Ausgabe:
a
j
f
j
b
f
c
g
i
e
d
h
g
h
e d g h i
i
Petra Mutzel
DAP2 SS08
21
Analyse TopSort
• Initialisierung: Θ(|V|)
(da d +(v) in konstanter Zeit abrufbar)
Theorem:
Der Algorithmus TopSort berechnet eine
topologische Sortierung der Knoten eines
DAGs G=(V,A) in Zeit Θ(|V|+|A|).
• Jeder Knoten kommt genau einmal in Q
while-Schleife wird |V|-mal durchlaufen
• Die for all-Schleife (Zeile 12) wird insgesamt
für jede Kante einmal durchlaufen: Θ(|A|)
• Gesamtaufwand: Θ(|V |+|A|)
Petra Mutzel
DAP2 SS08
22
Petra Mutzel
DAP2 SS08
23
Bäume
Kap. 6.5 Minimale Spannbäume
Definition: Ein ungerichteter Graph heißt Baum
(engl. tree), wenn er zusammenhängend und
kreisfrei ist.
Achtung: in diesem Abschnitt
ungerichtete gewichtete Graphen!
ungerichteter Graph G=(V,E)
Gewichtsfunktion w : E→R
Kantengewichte: Kosten, Länge, …
Petra Mutzel
DAP2 SS08
auch: freier Baum (im Gegensatz zu gewurzelter Baum)
nicht zusammenhängend: Wald
24
Petra Mutzel
DAP2 SS08
25
4
Erläuternde Bilder
zum Theorem
Theorem: Sei G=(V,E) ungerichteter Graph (ohne
Mehrfachkanten, Schleifen). Dann sind äquivalent:
1) G ist ein Baum
2) Jedes Paar von Knoten ist durch einen
eindeutigen Weg verbunden.
zu 2)
3) G ist zshgd., zerfällt aber durch Entfernen einer
beliebigen Kante in zwei Komponenten.
4) G ist zshgd. und |E| = |V|-1
zu 3)
5) G ist kreisfrei und |E|=|V|-1
6) G ist kreisfrei, aber durch Hinzufügen einer
beliebigen Kante entsteht ein Kreis.
Petra Mutzel
DAP2 SS08
zu 6)
27
Beweis: durch Ringschluss 1) 2) … 6) 1)
DAP2 SS08
28
2) 3)
• zusammenhängend klar
1) 2)
• Annahme: G zerfällt nach Löschen von (u,v) nicht
• Ex. Weg zwischen u und v, der (u,v) nicht
benutzt
• Weg nicht eindeutig! Widerspruch
• Da Baum zshgd. ex. Weg zwischen u und v
• Annahme: zwei Wege p und q
p′
u
Petra Mutzel
x
y
v
q′
• p′ + q′ bilden Kreis! Widerspruch
Petra Mutzel
DAP2 SS08
29
Petra Mutzel
DAP2 SS08
3) 4)
4) 5)
• zusammenhängend klar
• Da G zshgd. und |E| = |V|-1
die T-Kanten eines DFS-Baums sind genau
die Kanten von G
• G besitzt DFS-Baum mit |V|-1 T-Kanten
• Falls G mehr Kanten besitzt ex. B-Kante
• Durch Löschen einer B-Kante zerfällt G aber nicht
• G hat |V|-1 Kanten
Petra Mutzel
DAP2 SS08
30
• keine B-Kanten
• G kreisfrei
31
Petra Mutzel
DAP2 SS08
32
5
5) 6)
6) 1)
• G kreisfrei und besteht aus k Komponenten
• Sei u,v beliebiges Knotenpaar
• G hat |V|-k Kanten
• Entweder (u,v) ∈ E oder
• k=1 (d.h. G ist zusammenhängend)
• Hinzufügen einer Kante erzeugt Kreis
Hinzufügen von (u,v) erzeugt Kreis
ex. Weg von u nach v in G
• G ist zusammenhängend
Petra Mutzel
DAP2 SS08
33
Spannbaum
Gegeben: ungerichteter, zshgd. Graph G = (V,E)
Gewichtsfunktion w : E→R
Gesucht: ein Spannbaum T von G mit
minimalem Gewicht w(T)
w(T) := w(ET) := ∑e∈ ET w(e)
Anwendung: Konstruktion von Netzwerken
DAP2 SS08
35
Beispiel für MST
4
a
10
2
d
g
2
12
c
e
5
7
b
5
f
1
h
a
DAP2 SS08
37
d
36
g
i
e
c
Petra Mutzel
DAP2 SS08
i
8
4
Petra Mutzel
Definition:
• Eine Teilmenge E′ der Kanten heißt
aussichtsreich, wenn es einen MST gibt, der
alle Kanten aus E′ enthält.
• Eine Kante (u,v) verlässt eine Knotenmenge
S⊂V, wenn u∈S und v∉S
7
11
9
34
Minimum Spanning Tree (MST)
Gewicht eines Spannbaums:
b
DAP2 SS08
Minimaler Spannbaum
Definition: Sei G=(V,E) ein ungerichteter,
zusammenhängender Graph.
Ein Untergraph T=(V,ET) von G heißt Spannbaum
(engl. spanning tree) von G, falls T ein Baum ist.
Petra Mutzel
Petra Mutzel
f
S
Petra Mutzel
h
DAP2 SS08
39
6
MST Eigenschaft
Definition:
• Eine Teilmenge E′ der Kanten heißt
aussichtsreich, wenn es einen MST gibt, der
alle Kanten aus E′ enthält.
• Eine Kante (u,v) verlässt eine Knotenmenge
S⊂V, wenn u∈S und v∉S
Lemma:
Sei G=(V,E) zshgd. mit Gewichtsfunktion w:E→R.
Seien:
• S⊂V
• E′⊂E aussichtsreich und keine Kante aus E′
verlässt S
• e∈E eine Kante mit minimalem Gewicht, die S
verlässt
• E′:=∅ ist immer aussichtsreich.
• E′ aussichtsreich und |E′| = |V|-1
G′ := (V,E′) ist ein MST
Petra Mutzel
Dann ist E′∪{e} aussichtsreich.
DAP2 SS08
40
e'
• Ex. Kante e′ auf Kreis, die S verlässt
• Da w(e)≤w(e′) T – e′ + e ist ein MST
• E′∪{e} ist aussichtsreich
Petra Mutzel
Greedy-Algorithmus („gefräßig“): iterative
Konstruktion einer Lösung, die immer um die
momentan besten Kandidaten erweitert wird. 43
DAP2 SS08
42
Beispiel für Kruskal
b
4
a
2
d
g
2
12
c
e
5
7
5
f
1
h
Problem: Teste, ob T ∪ {ei} kreisfrei
Korrektheit von Kruskal: siehe nächste Vorlesung
Petra Mutzel
DAP2 SS08
43
Idee:
• Sortiere die Kanten nach aufsteigendem
Gewicht: w(e1)≤w(e2)≤…≤w(em)
• T:=∅
• Für i:=1,…,m:
• Falls
T ∪ {ei} kreisfrei, dann:
T:=T ∪ {ei}
i
8
4
Petra Mutzel
Realisierung von Kruskal
7
11
9
41
Idee:
• Sortiere die Kanten nach aufsteigendem
Gewicht: w(e1)≤w(e2)≤…≤w(em)
• T:=∅
• Für i:=1,…,m:
• Falls
T ∪ {ei} kreisfrei, dann:
T:=T ∪ {ei}
e
10
DAP2 SS08
6.5.1 Algorithmus von Kruskal
Beweis:
• Ex. MST T=(V,ET) mit E′ ⊆ ET
• Falls e∈ ET fertig!
• Sonst: ET ∪{e} enthält Kreis:
S
Petra Mutzel
DAP2 SS08
44
Petra Mutzel
DAP2 SS08
46
46
7
Teste, ob T ∪ {ei} kreisfrei
Idee:
• Aufruf der Funktion ISACYCLIC(V, T ∪ {ei})
• Gesamtlaufzeit für alle Kreis-Tests:
O(|V| |E|), da |E| Aufrufe nötig sind, und T pro
Aufruf bis zu |V|-1 Kanten besitzen kann.
Besser: Datenstruktur Union-Find
Idee: „Lasse Wälder wachsen“ bzw.
Partitionierung von Mengen
→ fast „Linearzeit“ erreichbar
Petra Mutzel
s. nächste
DAP2 SS08
47
VO(inkl.
Korrektheit)
j
f
4
b
a
g
c
d
e
DAP2 SS08
48
Zum Ausdrucken und Üben:
Zum Ausschneiden:
a
Petra Mutzel
i
h
10
b
g
7
11
9
12
2
d
2
c
e
5
7
f
i
8
4
1
h
5
Q: a j b f c e d g h i
Ausgabe:
8