Musterlösung 9 - id.ethz.ch

Werbung
ETH Zürich
Institut für Theoretische Informatik
Prof. Dr. Angelika Steger, Prof. Dr. Thomas Holenstein
Ralph Keusch
HS 2015
Algorithmen und Komplexität
Lösungsvorschlag zu Übungsblatt 9
Lösungsvorschlag zu Aufgabe 1
Wir nehmen an, dass sich die k Operationen aufteilen in eine erste Phase von k1 MakeNewSet- oder
Union-Operationen und eine zweite Phase von k2 = k − k1 Find-Operationen. Da die MakeNewSetund Union-Operationen jeweils in konstanter Zeit O(1) ausführbar sind, sind die Gesamtkosten
der ersten Phase O(k1 ).
Um die Laufzeit der zweiten Phase zu berechnen, definieren wir die Potentialfunktion φ( j) als die
Anzahl der Knoten, die nach insgesamt j Operationen von ihrer Wurzel mindestens Abstand 2
haben. Während der ersten Phase können wir höchstens k1 viele Knoten in die Struktur einfügen,
damit gilt sicher φ(k1 ) ≤ k1 .
Wenn nun mit der i-ten Find-Operation ein Knoten der Tiefe mi aufgerufen wird, so verursacht
das Zurücklaufen zur Wurzel (und die Path-Compression) Kosten Cmi für eine geeignet gewählte Konstante C. Da wir aber gleichzeitig Path-Compression durchführen, d.h. die mi − 1 Knoten,
die wir auf dem Weg zur Wurzel besuchen, direkt an die Wurzel hängen, verringert sich gleichzeitig das Potential um mi − 1. Wir haben während der zweiten Phase keine anderen Operationen,
somit verringert sich das Potential während der zweiten Phase insgesamt um ∑ik=2 1 (mi − 1).
Nun stellen wir aber fest, das per Definition φ( j) ≥ 0 für alle j gilt. Deshalb gilt insbesondere
k2
k2
i =1
i =1
0 ≤ φ ( k ) = φ ( k 1 ) − ∑ ( m i − 1) ≤ k 1 − ∑ ( m i − 1).
Darus folgt dann
k2
∑ ( m i − 1) ≤ k 1 .
i =1
Die Gesamtkosten betragen deshalb höchstens
k2
O(k1 ) + ∑ Cmi = O(k1 ) + C
i =1
k2
∑ ( m i − 1) + k 2
!
≤ O(k1 ) + C (k1 + k2 ) = O(k) .
i =1
Lösungsvorschlag zu Aufgabe 2
Unsere Implementation verwendet zwei Stacks S1 und S2 . Für die Queue implementieren wir
die Operationen E NQUEUE ( x ) und D EQUEUE () wie folgt:
Algorithm 1 E NQUEUE ( x )
S1 .P USH ( x )
Korrektheit: Wir zeigen, dass D EQUEUE () immer jenes Objekt y zurückgibt, welches unter allen
Objekten in der Queue als erstes mit E NQUEUE (y) eingefügt wurde. Das ist so, da das oberste
Objekt in S2 immer dieses y ist und der Algorithmus immer das oberste Objekt aus S2 zurückgibt.
1
Algorithm 2 D EQUEUE ()
if S2 .isEmpty then
while not S1 .isEmpty do
S2 .P USH (S1 .P OP )
end while
end if
return S2 .P OP ()
Amortisierte Laufzeit: Wir definieren die Potentialfunktion φ(i ) und die Funktion t(i ) wie folgt:
φ(i ) := 2 · (Anzahl Objekte in S1 nach den ersten i Operationen)
t(i ) := Zeit, die während den ersten i Operationen aufgewendet wurde.
Wir nehmen an, dass die Operationen P OP und P USH jeweils nur einen Zeitschritt brauchen.
Offensichtlich gilt φ(0) = t(0) = 0 und φ(i ) ist immer positiv. Wir zeigen per Induktion über
i, dass t(i ) + φ(i ) ≤ 3i. (Dies ergibt die obere Schranke t(i ) ≤ t(i ) + φ(i ) ≤ 3i, da φ(i ) ≥ 0.)
Die Induktionsverankerung i = 0 ist trivial. Die Induktionshypothese ist t(i − 1) + φ(i − 1) ≤
3(i − 1) = 3i − 3. Falls nun die die i-te Operation E NQUEUE ist, finden wir
t ( i ) + φ ( i ) = t ( i − 1) + 1 + φ ( i − 1) + 2
= t(i − 1) + φ(i − 1) + 3 ≤ 3i − 3 + 3 = 3i.
Falls die i-te Operation D EQUEUE ist, unterscheiden wir, ob S2 leer ist oder nicht. Wenn S2 nicht
leer ist, ergibt sich
t ( i ) + φ ( i ) = t ( i − 1) + 1 + φ ( i − 1)
= t(i − 1) + φ(i − 1) + 1 ≤ 3i − 3 + 1 < 3i.
Falls S2 leer ist, müssen für jedes Objekt in S1 genau 2 Operationen (ein P OP von S1 und ein
P USH auf S2 ) ausgeführt werden. Am Ende wird ein zusätzliches P OP auf S2 aufgerufen. Gemäss
Definition von φ ist die Anzahl benötigter Operationen genau φ(i − 1) + 1 und folglich gilt
t ( i ) + φ ( i ) = t ( i − 1) + φ ( i − 1) + 1 + 0
≤ 3i − 3 + 1 + 0 < 3i.
Lösungsvorschlag zu Aufgabe 3
Nein. Nach Lemma 4.12 der Vorlesung müsste mindestens eines der drei Blätter ein Kind haben;
der Baum kann deswegen kein Baum eines Fibonacci-Heaps sein.
2
Herunterladen