2 - TUM - Zentrum Mathematik

Werbung
Technische Universität München
Zentrum Mathematik
Diskrete Optimierung: Grundlagen (MA 2501)
Prof. Dr. R. Hemmecke, Dr. R. Brandenberg, M.Sc.-Math. B. Wilhelm
Übungsblatt 2
Aufgabe 2.1
Sei G = (V, E) ein Graph.
a) Zeigen Sie: der in der Vorlesung vorgestellte DFS Algorithmus besitzt Laufzeit
O(|V | + |E|) = O(max(|V |, |E|)).
b) Formulieren Sie analog zum DFS Algorithmus der Vorlesung den sogenannten BreadthFirst-Search (BFS) Algorithmus. Dieser erfüllt die gleichen Ziele wie der DFS Algorithmus, jedoch werden im BFS Baum nach Möglichkeit zunächst alle Kanten zu den
Knoten der Nachbarschaft eines gerade markierten Knotens gesammelt.
c) Sei G zusammenhängend, aber nicht kreisfrei. Zeigen Sie: Die durch den BFS bzw.
DFS Algorithmus konstruierten Spannbäume TBreit und TT ief von G sind verschieden,
wenn beide Algorithmen mit dem selben Knoten starten.
Lösung zu Aufgabe 2.1
a) Zuerst zeige man O(|V | + |E|) = O(max(|V |, |E|)) und überlege sich, dass O(|V |) )
O(|E|) nur dann, wenn man Graphen betrachtet, die viel mehr isolierte Knoten als
Kanten besitzen.
Dann stelle man fest, dass die äußere Schleife des Algorithmus (2.) genau soviele
Durchläufe benötigt wie der Graph Zusammenhangskomponenten (Vi , Ei ) besitzt.
Der rekursive Aufruf SEARCH(w) innerhalb von SEARCH(v) für die Wurzel v einer
Zusammenhangskomponente geschieht nur dann, wenn w noch unmarkiert ist, also
genau einmal für jeden Knoten außer v. In toto werden in SEARCH(v) und den rekursiven Aufrufen alle Knoten und Kanten Ei der jeweiligen Zusammenhangskomponente
maximal zweimal l angepackt “(d.h. O(1) Arbeitsschritte pro Knoten und Kante),
”
Search(v) wird also in O(|Vi + |Ei |) = O(1 + |Ei |) beendet.
P
Die Gesamtlaufzeit ist also i O(1 + |Ei |) = O(|V | + |E|).
b) Einzige Änderungen: Markiere v vor Search(v), führe eine zunächst leere Liste W ← ∅
ein und in Search(v) ändere 4. zu Ist w unmarkiert, dann markiere w, setze T =
”
T ∪ {v, w} und füge es hinten an die Liste W an“. Ergänze hinter der Schleife, aber
vor END SEARCH 5. nimm nun den ersten Knoten u aus der Liste W heraus und
”
CALL SEARCH(u).
c) Sei v der gemeinsame Startknoten, e ∈ E \ EBreit und C der Kreis in EBreit ∪ e. Seien
vBreit und vT ief die jeweils ersten Knoten, die mittels BFS/DFS von C erreicht werden.
Ist vBreit = vT ief und sind w1 , w2 die beiden Nachbarn von vBreit in C, dann ist
{vBreit , wi } ∈ EBreit \ ET ief für mindestens ein i ∈ {1, 2}.
Ist vBreit 6= vT ief , so erreicht die Tiefensuche vBreit über einen Pfad v, . . . , vT ief , . . . , vBreit ,
besitzt also eine Kante, die nicht in EBreit liegen kann, da die Breitensuche ja bereits
auf einem Pfad ohne vT ief zu vBreit gelangt, der v, vBreit -Weg aber natürlich in jedem
Baum eindeutig sein muss.
Aufgabe 2.2
Sei G = (V, E) ein Graph mit |V | = n, |E| = m und v, w ∈ V . Ferner sei dist (v, w) die
Anzahl der Kanten eines kantenminimalen v, w-Weges. Welche der folgenden Aussagen
sind richtig?
(i) Man kann dist (v, w) unter Verwendung von DFS/BFS in O(n + m) bestimmen.
(ii) Man kann die Liste der Abstände zwischen allen Knotenpaaren unter Verwendung
von DFS/BFS in O(n + m) bestimmen.
(iii) Man kann die Liste der Abstände zwischen allen Knotenpaaren unter Verwendung
von DFS/BFS in O(nm) bestimmen.
(iv) Man kann unter Verwendung von DFS/BFS in O(n + m) bestimmen, ob G bipartit
ist.
(v) Man kann in O(m) bestimmen, ob G bipartit ist.
Lösung zu Aufgabe 2.2
(i) Geht mit BFS. Wähle v als Wurzel und ergänze BFS wie folgt: setze dist (v) ← 0
und bei dann markiere w “dist (w) = dist (v) + 1. Mit DFS geht es nicht, da DFS
”
zunächst unnötig lange Wege zu den Knoten bestimmt und diese können später
innerhalb des DFS nicht wirklich korrigiert werden.
(ii) Geht weder mit DFS noch mit BFS. Ist etwa G ein Baum, so ist jeder Knoten mit
jedem anderen verbunden, d.h., die Liste der Abstände hat O(n2 ) Einträge, diese
können dann aber nicht in O(n + m) = O(n) geschrieben werden.
(iii) Versucht man die volle Liste der Abstände zu schreiben auch wenn viele Knoten
isoliert sind, geht es nicht. Im Extremfall ist E = ∅, also O(nm) = O(0), aber die
Liste hat die Größe O(n2 ). Schreibt man nur endliche Abstände in die Liste, dann
geht das mittels BFS, da der Algorithmus pro Zusammenhangskomponente (Vi , Ei )
˙ i |) = O(|Vi ||E
˙ i |) (da Ei 6= 0) alle Abstände bestimmt. In toto
in O(|Vi |2 + |Vi ||E
ergibt sich also O(nm), wenn man die isolierten Knoten nie anfasst (das geht!).
(iv) Geht mit beiden Algorithmen, indem man statt der Markierung gleich eine Farbe
vergibt und abbricht, wenn eine Kante zwei Knoten gleicher Farbe verbindet.
(v) Geht mit beiden Algorithmen (wieder dürfen isolierte Knoten nicht angefasst werden).
Herunterladen