Übungsblatt 11 - Lehrstuhl 11 Algorithm Engineering

Werbung
Fakultät für Informatik
Lehrstuhl 11 / Algorithm Engineering
Prof. Dr. Petra Mutzel
Carsten Gutwenger, André Gronemeier, Anna-Lena Lamprecht,
Tobias Marschall, Hubert Wagner, Hoi-Ming Wong
Sommersemester 2008
DAP2 Übung – Blatt 11
Ausgabe: 19. Juni — Abgabe: 26. Juni
Globalübung: Fr. 5. Juli
Aufgabe 11.1 (4 Punkte) Gegeben ist die folgende Adjazenzliste eines ungerichteten Multigraphen:
1
2
3
4
5
6
7
8
→4→2→4→3→6
→1→4
→4→6→1
→8→5→3→1→2→1
→4→7→6
→5→1→3
→5→8
→7→4
1. Zeichne den entsprechenden Graphen zu der Adjazenzliste.
2. Gib die dazugehörige Adjazenzmatrix an.
3. DFS-Nummerierung: Beim Traversieren eines Graphen mit DFS-Visit wird noch zusätzlich
eine DFS-Nummer für jeden Knoten aufsteigend vergeben. Die Nummerierung beginnt
bei 0 und wird dann vergeben, wenn ein Knoten zum ersten Mal von DFS-Visit besucht
wird.
Führe eine DFS-Traversierung an deinem gezeichneten Graphen durch und weise dabei
jedem Knoten eine gültige DFS-Nummer zu. Beginne die DFS-Traversierung bei Knoten
1. Beachte, dass die Reihenfolge der zu besuchenden Knoten durch die obige Adjazenzliste
bestimmt wird.
4. BFS-Nummerierung: Die BFS-Nummer wird, wie die DFS-Nummer, aufsteigend für jeden
Knoten vergeben. Die Nummerierung beginnt bei 0 und wird dann vergeben, wenn ein
Knoten zum ersten Mal von BFS besucht wird.
Führe eine BFS-Traversierung an deinem gezeichneten Graphen durch und weise dabei
jeder Knoten eine gültige BFS-Nummer zu. Beginne die BFS-Traversierung bei Knoten 1.
Beachte, dass die Reihenfolge der zu besuchenden Knoten durch die obige Adjazenzliste
bestimmt wird.
Aufgabe 11.2 (2 Punkte) Was ist die maximal mögliche Dichte eines ungerichteten und eines
gerichteten Graphen ohne Mehrfachkanten (Multikanten) und Schleifen, wenn beide Graphen
jeweils n Knoten besitzen?
Aufgabe 11.3 (4 Punkte) Gib eine iterative Version von DFS-Visit in Pseudo-Code an. Verwende dabei einen Stack als Hilfsdatenstruktur.
Aufgabe 11.4 (2 Punkte) Gegeben sei ein ungerichteter, zusammenhängender Graph G =
(V, E) und ein Knoten s ∈ V . Zeige oder widerlege: Wird DF S − V isit(s) aufgerufen, dann ist
der DFS-Baum mit der Wurzel s eindeutig.
Aufgabe 11.5 (2 Punkte) Erkläre, wie es passieren kann, dass ein Knoten v eines gerichteten
Graphen in einem Tiefensuchbaum landet, der nur v enthält, obwohl v sowohl eintretende als
auch austretende Kanten hat. Gib dazu ein Beispiel, wo dies der Fall ist.
Aufgabe 11.6 (2 Punkte) Man kann BFS auch auf gerichteten Graphen durchführen, wobei
man Kanten nur in Vorwärtsrichtung abläuft. Der einem gerichteten Graph zugrundeliegende
ungerichtete Graph entsteht, indem man die Kantenrichtung ignoriert.
1. Erweitere den Pseudo-Code in Listing 6.1 so, dass BFS einen gerichteten Graphen, dessen
zugrundeliegende Graph zusammenhängend ist, durchläuft.
2. Wenn wir BFS zunächst auf einem gerichteten, zusammenhängenden Graphen G aufrufen
und dann auf dem zugrundeliegenden ungerichteten Graphen von G, was ist dann der
maximale Höhenunterschied zwischen den BFS-Bäume im gerichteten und der BFS-Baum
im ungerichteten Fall? Gib einen Beispiel für deine Überlegung.
Aufgabe 11.7 (4 Punkte) Der Durchmesser eines ungewichteten, azyklischen Graphen G =
(V, A) ist der größte graphentheoretische Abstand von zwei Knoten in G. Gib einen Algorithmus zur Berechnung des Durchmessers von G mit Laufzeit O(|V |) an. Begründe, warum dein
Algorithmus die angegebene Laufzeit besitzt.
Tipp: Wurzele G erst an einem Knoten v und unterscheide die beiden folgende Fälle:
• v ist ein Knoten des längsten Weges.
• v ist kein Knoten des längsten Weges.
Der längste Weg zwischen zwei Blättern ist der Durchmesser von G.
Hinweis: Es ist nicht notwendig, den Algorithmus in Pseudo-Code anzugeben.
Bonusaufgabe 11.8 (4 Bonuspunkte) Eine universelle Senke eines gerichteten Graphen (ohne
Multikanten und Schleifen) G = (V, E) ist ein Knoten mit n − 1 eingehenden und keine ausgehenden Kanten. Skizziere einen Algorithmus, der bei einer gegebenen Adjazenzmatrix von G in
Zeit O(|V |) feststellen kann, ob der Graph G eine universelle Senke enthält. Begründe, warum
dein Algorithmus die vorgegebene Lauftzeit besitzt.
Powodzenia!
– das DAP2-Team
Herunterladen