6 Folien/Blatt - Chair 11: ALGORITHM ENGINEERING

Werbung
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
Herunterladen