Elementare Graphalgorithmen Kap. 6.5: Minimale Spannbäume

Werbung
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
Nachtest für Ausnahmefälle
•  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
Petra Mutzel
DAP2 SS08
2
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
Petra Mutzel
DAP2 SS08
3
Überblick
•  Kurzer Rückblick: BFS / DFS
•  Topologisches Sortieren
•  Minimale Spannbäume
Petra Mutzel
DAP2 SS08
4
Breitensuche (BFS)
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)
dist(v) enthält den graphentheoretischen Abstand
von u nach v; π(v) den Vorgänger des kürz. Weges
Petra Mutzel
DAP2 SS08
5
Algorithmus BFS(s)
Sei G=(V,E) ungerichteter Graph, s,u,v: Knoten
(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) 
}
}
}
Petra Mutzel
DAP2 SS08
6
Algorithmus DFS(G)
Sei G=(V,E) ungerichteter Graph, v,w: Knoten
(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
BFS-Baum vs. DFS-Baum
BFS-Baum
1
2
3
Höhe eindeutig
1
2
2
3
3
4
DFS-Baum
7
6
5
DFS-Nummer gibt die Reihenfolge der besuchten Knoten an
Kap. 6.4.3 Topologisches Sortieren
Achtung: in diesem Abschnitt
gerichtete Graphen!
Petra Mutzel
DAP2 SS08
9
Modellierung von Abhängigkeiten
2.
3.
Dachstuhl
Mauern
1.
Baugrube
4.
→
5.
Fenster
Dach eindecken
gerichteter Graph
Kante (x,y) ⇒ Aufgabe x muss abgeschlossen
werden, bevor mit y angefangen werden kann
Petra Mutzel
DAP2 SS08
10
DAG
Grundvoraussetzung:
Graph ist azyklisch!
(also keine zyklischen Abhängigkeiten)
Definition:
Ein DAG (directed acyclic graph) ist ein
gerichteter Graph, der keinen (gerichteten)
Kreis enthält.
Petra Mutzel
DAP2 SS08
11
Topologisches Sortieren
Topologisches Sortieren
Gegeben: DAG G = (V,A)
Gesucht:
v1
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
Warum ist dies nicht mit BFS lösbar?
2.
3.
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
13
Quellen & Senken
•  Eine Quelle ist ein Knoten ohne eingehende Kanten
•  Eine Senke ist ein Knoten ohne ausgehende Kanten
Quelle
Senke
Petra Mutzel
DAP2 SS08
14
Beobachtung:
Jeder (nicht-leere) DAG G =(V,A) hat mindestens
eine Quelle und eine Senke.
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!
•  Analog für Quelle
Petra Mutzel
DAP2 SS08
15
Algorithmus
Idee:
Wähle immer Quelle und entferne sie dann
while G ist nicht leer do
Wähle eine Quelle s in G und gib sie aus
G := G - s
end while
Petra Mutzel
DAP2 SS08
16
Verbesserungen
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.
Müssen wir Knoten wirklich löschen?
•  Nein!
Verwalte Eingangsgrad in Knotenfeld indeg.
Petra Mutzel
DAP2 SS08
17
Algorithmus TopSort
(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
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)  }
Petra Mutzel
DAP2 SS08
19
Beispiel: TopSort
a
b
c
d
Q
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 der Laufzeit
•  Initialisierung: Θ(|V|)
(da d +(v) in konstanter Zeit abrufbar)
•  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
Analyse TopSort
Theorem:
Der Algorithmus TopSort berechnet eine
topologische Sortierung der Knoten eines
DAGs G=(V,A) in Zeit Θ(|V|+|A|).
Petra Mutzel
DAP2 SS08
23
Kap. 6.5 Minimale Spannbäume
Achtung: in diesem Abschnitt
ungerichtete gewichtete Graphen!
ungerichteter Graph G=(V,E)
Gewichtsfunktion w : E→R
Kantengewichte: Kosten, Länge, …
Petra Mutzel
DAP2 SS08
24
Bäume
Definition: Ein ungerichteter Graph heißt Baum
(engl. tree), wenn er zusammenhängend und
kreisfrei ist.
auch: freier Baum (im Gegensatz zu gewurzelter Baum)
nicht zusammenhängend: Wald
Petra Mutzel
DAP2 SS08
25
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.
3)  G ist zshgd., zerfällt aber durch Entfernen einer
beliebigen Kante in zwei Komponenten.
4)  G ist zshgd. und |E| = |V|-1
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
27
Erläuternde Bilder
zum Theorem
zu 2)

zu 3)
zu 6)
Petra Mutzel
DAP2 SS08
28
Beweis: durch Ringschluss 1)  2)  … 6)  1)
1)  2)
•  Da Baum zshgd.  ex. Weg zwischen u und v
•  Annahme: zwei Wege p und q
p′
u
x
y
v
q′
•   p′ + q′ bilden Kreis! Widerspruch
Petra Mutzel
DAP2 SS08
29
2)  3)
•  zusammenhängend klar
•  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
Petra Mutzel
DAP2 SS08
30
3)  4)
•  zusammenhängend klar
•  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
31
4)  5)
•  Da G zshgd. und |E| = |V|-1
 die T-Kanten eines DFS-Baums sind genau
die Kanten von G
•  keine B-Kanten
•  G kreisfrei
Petra Mutzel
DAP2 SS08
32
5)  6)
•  G kreisfrei und besteht aus k Komponenten
•  G hat |V|-k Kanten
•  k=1 (d.h. G ist zusammenhängend)
•  Hinzufügen einer Kante erzeugt Kreis
Petra Mutzel
DAP2 SS08
33
6)  1)
•  Sei u,v beliebiges Knotenpaar
•  Entweder (u,v) ∈ E oder
  Hinzufügen von (u,v) erzeugt Kreis
   ex. Weg von u nach v in G
•  G ist zusammenhängend
Petra Mutzel
DAP2 SS08
34
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.
Gewicht eines Spannbaums:
w(T) := w(ET) := ∑e∈ ET w(e)
Petra Mutzel
DAP2 SS08
35
Minimaler Spannbaum
Minimum Spanning Tree (MST)
Gegeben: ungerichteter, zshgd. Graph G = (V,E)
Gewichtsfunktion w : E→R
Gesucht: ein Spannbaum T von G mit
minimalem Gewicht w(T)
Anwendung: Konstruktion von Netzwerken
Petra Mutzel
DAP2 SS08
36
Beispiel für MST
b
4
a
10
2
d
g
7
11
9
2
12
c
e
5
7
i
8
4
5
f
Petra Mutzel
1
h
DAP2 SS08
37
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
b
a
d
g
i
e
c
f
S
Petra Mutzel
h
DAP2 SS08
39
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
•  E′:=∅ ist immer aussichtsreich.
•  E′ aussichtsreich und |E′| = |V|-1
 G′ := (V,E′) ist ein MST
Petra Mutzel
DAP2 SS08
40
MST Eigenschaft
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
Dann ist E′∪{e} aussichtsreich.
Petra Mutzel
DAP2 SS08
41
Beweis:
•  Ex. MST T=(V,ET) mit E′ ⊆ ET
•  Falls e∈ ET  fertig!
•  Sonst: ET ∪{e} enthält Kreis:
e
S
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
DAP2 SS08
42
6.5.1 Algorithmus von Kruskal
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}
Greedy-Algorithmus („gefräßig“): iterative
Konstruktion einer Lösung, die immer um die
momentan besten Kandidaten erweitert wird. 43
Petra Mutzel
DAP2 SS08
43
Beispiel für Kruskal
b
4
a
10
2
d
g
7
11
9
2
12
c
e
5
7
i
8
4
5
f
1
h
Korrektheit von Kruskal: siehe nächste Vorlesung
Petra Mutzel
DAP2 SS08
44
Realisierung von Kruskal
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}
Problem: Teste, ob T ∪ {ei} kreisfrei
Petra Mutzel
DAP2 SS08
46
46
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)
Petra Mutzel
DAP2 SS08
48
Zum Ausschneiden:
a
j
f
b
g
c
d
e
i
h
Q: a j b f c e d g h i
Ausgabe:
Zum Ausdrucken und Üben:
4
a
10
b
d
g
7
11
9
12
2
2
c
e
5
7
4
f
i
8
1
h
5
Herunterladen