8. Ü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. 7
Dieses Übungsblatt muss bis zum 16.06.2016, 15:30 abgegeben werden. Schreiben Sie Ihren Namen
und Ihre Übungsgruppe oben auf die Abgabe!
Aufgabe 1: Auswerten von arithmetischen Ausdrücken (30 Punkte)
In dieser Aufgabe konstruieren wir einen Algorithmus, der arithmetische Ausdrücke in logarithmischer
paralleler Zeit auswertet. Ein solcher Ausdruck ist dabei ein gewurzelter, binärer Baum, dessen Knoten
v mit folgenden Informationen versehen sind:
• jedem Blatt ist ein Wert value(v) aus einer Grundmenge M zugeordnet
• jedem inneren Knoten ist ein Operator (etwa + oder ∗) zugeordnet
Das Ziel ist es, die Funktion value auf alle inneren Knoten u zu erweitern, wobei value(u) = value(v)◦
value(w) gelten soll, wenn v und w die Kinder von u sind und ◦ der zu u zugehörige Operator ist.
Wir nennen u abgeschlossen, sobald value(u) berechnet wurde.
Während des Algorithmus werden bestimmten Knoten v zusätzliche Daten zugewiesen. Wir nennen
einen Knoten v aktiv, falls ihm diese Daten bereits zugewiesen wurden:
• fv : eine Funktion M → M
• cond(v): ein Zeiger auf einen anderen Knoten
Der Algorithmus besteht aus folgenden Phasen:
Aktivieren Für alle inaktiven inneren Knoten u, für die mindestens eines der Kinder v oder w bereits
abgeschlossen wurde: Es sei OBdA das linke Kind v bereits abschlossen. Setze fu auf die Funktion
x 7→ value(v) ◦ x, wobei ◦ der zu u gehörige Operator ist und setze cond(u) = w. Damit ist u
nun also aktiv.
Verdoppeln Für alle aktiven Knoten u: Setze fu auf die Funktion x 7→ fu (fcond(u) (x)) und cond(u) =
cond(cond(u)).
Abschließen Für alle aktiven Knoten u, für die cond(u) bereits abgeschlossen wurde: Berechne value(u) =
fu (value(cond(u))). Damit ist u nun also abgeschlossen.
Die Phasen werden in folgender Sequenz iterativ angewandt, bis die Wurzel abgeschlossen ist: (Aktivieren, Verdoppeln, Verdoppeln, Abschließen).
(a) Stellen Sie den Ausdruck (3 + 2 ∗ 2) ∗ 3 + 5 als Baum dar und werten Sie ihn mit dem obigen
Algorithmus aus. (7 Punkte)
(b) Argumentieren Sie kurz, dass der Algorithmus terminiert und korrekt ist. (5 Punkte)
(c) Zeigen Sie, dass O(log n) Runden ausreichen, um einen beliebigen Baum mit n Blättern auszuwerten. Nehmen Sie dazu an, n eine 2-er Potenz ist und betrachten Sie die modifizierte Sequenz
(Abschließen, Aktivieren, Verdoppeln, Verdoppeln).
1
Sei size(u) die Anzahl der Blätter im Teilbaum von u. Zeigen Sie, dass die nachfolgenden beiden
Invarianten nach k Runden (nummeriert von 0 anfangend) der modifizierten Sequenz gelten. (13
Punkte)
• falls size(u) ≤ 2k , dann ist u abgeschlossen
• eine der folgenden Aussagen trifft für jeden aktiven Knoten u zu:
– es gilt size(u) − size(cond(u)) ≥ 2k
– beide Kinder von cond(u) sind noch nicht abgeschlossen
– cond(u) ist ein Blatt
(d) Um Ausdrücke mittels des obigen Algorithmus in logarithmischer Zeit auszuwerten, ist es notwendig, die Verkettung x 7→ fu (fcond(u) (x)) in konstanter Zeit zu berechnen.
Zeigen Sie, dass diese Voraussetzung in den nachfolgenden Situationen gegeben ist. (5 Punkte)
• falls M eine beliebige endliche Menge ist
• falls M = Q ist und die Operatoren aus {+, −, ∗, /} stammen
Aufgabe 2: Korrektheit von Odd-Even-Mergesort (10 Punkte)
Zeigen Sie induktiv, dass Odd-Even-Mergesort die Voraussetzungen für das 0-1-Prinzip erfüllt. Das
heißt: Falls Odd-Even-Mergesort das Array (a1 , . . . , an ) zu (b1 , , . . . , bn ) transformiert und f eine monotone Funktion ist, dann wird (f (a1 ), . . . , f (an )) zu (f (b1 ), . . . , f (bn )) transformiert.
2
Herunterladen