4. Übungsblatt - Zentrum für Angewandte Informatik der Universität

Werbung
Universität zu Köln
Institut für Informatik
Dr. O. Schaudt
A. van der Grinten
Übung zu Parallele Algorithmen
Blatt Nr. 4
Dieses Übungsblatt muss bis zum 12.04.2016, 15:30 abgegeben werden. Schreiben Sie Ihren Namen
und Ihre Übungsgruppe oben auf die Abgabe!
Aufgabe 1: Eulerkreise in Bäumen (25 Punkte)
Sei G ein ungerichteter Baum mit n Knoten. Wir ersetzen jede Kante in G durch zwei entgegengesetzte
gerichtete Kanten, um einen gerichteten Graphen G0 zu erhalten.
(a) Zeigen Sie, dass G0 einen Eulerkreis besitzt. (3 Punkte)
Angenommen, G0 ist folgendermaßen durch Adjanzenzlisten gegeben: Für jeden Knoten u haben wir
ein Array Au (1), Au (2), . . ., das genau die Nachfolger von u enthält.
Im folgenden möchten wir ein Verfahren konstruieren, dass einen Eulerkreis in G0 berechnet. Genauer
konstruiert das Verfahren ein Array tournext, wobei tournext(u → v) für jede Kante u → v in G0 den
Nachfolger von u → v im Eulerkreis angibt.
Sei u → v eine Kante in G0 und k der Index, so dass Au (k) = v. Dann definieren wir next(u → v) als
die Kante u → Au (k + 1), falls der Index k + 1 in Au existiert, bzw. ansonsten als u → Au (1).
Für alle Kanten u → v in G0 setzen wir tournext(u → v) := next(v → u).
(b) Wenden Sie das Verfahren auf den nachfolgenden Baum an und verifizieren Sie, dass Sie einen
Eulerkreis erhalten. (6 Punkte)
2
1
4
6
5
7
3
(c) Zeigen Sie, dass das Verfahren einen Eulerkreis in einem beliebigen Baum berechnet. (8 Punkte)
(d) Zeigen Sie, dass sich das Verfahren auf einer P-RAM mit O(n) Prozessoren in Zeit O(log n)
implementieren lässt. (8 Punkte)
Aufgabe 2: Tiefensuche in Bäumen (15 Punkte)
Während es im sequentiellen Fall einfach ist, eine Tiefensuche durch einen Baum G (oder durch
einen beliebigen Graphen) durchzuführen, um Informationen wie die Größe von Teilbäumen oder Preund Postorder-Nummerierungen von Knoten zu erhalten, stellt sich dieser Algorithmus als schwer
parallelisierbar heraus.
1
Mithilfe eines Eulerkreises in G0 (siehe Aufgabe 1) lassen sich diese Informationen (im Fall von
Bäumen) dennoch extrahieren.
Sei r ein beliebiger Knoten in G. Wir wollen G in einen gewurzelten Baum mit Wurzel r transformieren.
Genauer wollen wir für jeden Knoten v in G einen Knoten f ather(v) berechnen, der den Vater von v
im Baum G mit Wurzel r angibt.
(a) Konstruieren Sie einen Algorithmus, der die f ather-Funktion mit O(n) Prozessoren in Zeit
O(log n) löst, wobei n die Anzahl der Knoten ist. (8 Punkte)
(b) Entwickeln Sie ein Verfahren, dass die Anzahl der Elemente in jedem Teilbaum zählt. (7 Punkte)
Hinweis: Berechnen Sie den Rang (= Distanz vom Anfang der Liste bis zu einem bestimmten Element)
jeder Kante innerhalb des Eulerkreises und betrachten Sie für jede Kante u − v in G diejenige der
beiden Kanten u → v bzw. v → u mit geringerem Rang. Wie sieht der durch diese Kanten erzeugte
Graph aus?
2
Herunterladen