Aufgabe 39+40

Werbung
Übungen zur Vorlesung
Datenstrukturen und Algorithmen SS 2006
Blatt 13
Sven Grothklags
University of Paderborn
10. Juli 2006
Sven Grothklags (University of Paderborn)
DuA Übungsblatt 13
10. Juli 2006
1 / 13
Aufgabe 39 a)
P = {{b, h}, {c, c}, {d, k}, {j, l}}
b
LCA(u)
1
2
3
4
5
6
7
8
9
10
a
c
d
Make-Set(u)
e
f
g
h
i
j
ancestor [Find-Set(u)] ← u
for alle Kinder v von u
do LCA(v )
k
l
Union(u, v )
ancestor [Find-Set(u)] ← u
color [u] ← BLACK
for alle Knoten v mit {u, v } ∈ P
do if color [v ] = BLACK
then print ’LCA(’ u ’,’ v ’)=’ ancestor [Find-Set(v )]
Sven Grothklags (University of Paderborn)
DuA Übungsblatt 13
10. Juli 2006
2 / 13
Aufgabe 39 b)
Zeigen Sie, dass Zeile 10 des Algorithmus für jedes Paar {u, v } ∈ P genau
einmal ausgeführt wird.
Beobachtungen:
I Der Algorithmus LCA durchläuft wegen seines rekursiven Aufbaus
den gesamten Baum.
I Für jeden Knoten u des Baumes wird deshalb genau einmal LCA(u)
aufgerufen.
I Die Knoten werden dabei in Postorder-Reihenfolge schwarz gefärbt.
Daraus folgt:
I Zeile 9 wird für jedes Paar {u, v } genau zweimal ausgeführt. (Falls
u = v nur einmal.)
I Da Knoten erst nach der Bearbeitung aller Nachkommen schwarz
gefärbt werden, wird Zeile 10 nur für den Knoten mit der höheren
Postorder-Nummer ausgeführt.
Sven Grothklags (University of Paderborn)
DuA Übungsblatt 13
10. Juli 2006
3 / 13
Aufgabe 39 c)
Zeigen Sie, dass zum Zeitpunkt, an dem LCA(u) aufgerufen wird, die
Anzahl der in der Union-Find-Datenstruktur verwalteten disjunkten
Mengen gleich der Tiefe von u in T ist.
Induktion über die Tiefe t des Knotens u:
I Induktionsanfang: t = 0 (Wurzel)
Für die Wurzel root[T ] gilt, dass zum Zeitpunkt des Aufrufs
LCA(root[T ]) noch keine disjunkten Mengen verwaltet werden.
I Induktionsschritt: t − 1 → t, t > 0
Sei p der Vater von u. Zum Zeitpunkt des Aufrufs von LCA(p)
werden nach Induktionsvoraussetzung t − 1 Mengen verwaltet.
In Zeile 1 wird dann eine zusätzliche Menge erzeugt. Falls u das erste
betrachtete Kind von p ist, ist nichts weiter zu zeigen.
Ansonsten hat jeder vor u betrachtete Bruder b nach dem Aufruf
LCA(b) eine neue Menge erzeugt, die aber in Zeile 5 mit der Menge
des Vaters p vereinigt wird.
Sven Grothklags (University of Paderborn)
DuA Übungsblatt 13
10. Juli 2006
4 / 13
Aufgabe 39 c) Hilfslemma
Der Aufruf LCA(u) erzeugt eine neue Menge, die alle Knoten des
Unterbaums mit Wurzel u enthält.
Induktion über die Höhe h des Knotens u:
I
I
Induktionsanfang: h = 0 (Blatt)
Für ein Blatt u gilt, dass in Zeile 1 eine neue Menge {u} erzeugt
wird. Da u keine Kinder hat, werden keine weiteren
Mengenmanipulationen“ durchgeführt.
”
Induktionsschritt: h > 0
In Zeile 1 wird die Menge {u} erzeugt. Anschließend wird diese
Menge nach Induktionsvoraussetzung um die Knoten aller der
Unterbäume erweitert, deren Wurzeln Kinder von u sind (Zeile 5).
Am Ende enthält die neue Menge also alle Knoten des Unterbaums
mit Wurzel u.
Sven Grothklags (University of Paderborn)
DuA Übungsblatt 13
10. Juli 2006
5 / 13
Aufgabe 39 d)
Zeigen Sie, dass der Algorithmus LCA für jedes Paar {u, v } ∈ P den
jüngsten gemeinsame Vorfahren ausgibt.
Wir zeigen:
Vor/nach jedem Schleifendurchlauf (Zeile 3 bis 6) während der
Bearbeitung von LCA(u) gilt, dass in ancestor [Find-Set(v )] der jüngste
gemeinsame Vorfahre von u und v für alle Knoten v , die sich aktuell in der
Union-Find-Datenstruktur befinden, steht.
Da sich alle aktuell schwarzen Knoten auch in der
Union-Find-Datenstruktur befinden, gilt damit insbesondere für Zeile 10,
dass dort der jüngste gemeinsame Vorfahre von u und v ausgegeben wird.
Nach 39 a) wird Zeile 10 für jedes Paar genau einmal aufgerufen. Der
Algorithmus arbeitet somit korrekt.
Sven Grothklags (University of Paderborn)
DuA Übungsblatt 13
10. Juli 2006
6 / 13
Aufgabe 39 d)
Vor/nach jedem Schleifendurchlauf (Zeile 3 bis 6) während der
Bearbeitung von LCA(u) gilt, dass in ancestor [Find-Set(v )] der jüngste
gemeinsame Vorfahre von u und v für alle Knoten v , die sich aktuell in der
Union-Find-Datenstruktur befinden, steht.
Betrachte LCA(u) für einen Knoten u.
I
Vor erstem Schleifendurchlauf:
In den Zeilen 1 und 2 wird {u} mit ancestor [Find-Set(u)] = u der
Union-Find-Datenstruktur neu hinzugefügt. Somit ist für Knoten u
die Aussage korrekt.
Falls u die Wurzel ist, befinden sich keine weiteren Knoten in der
Union-Find-Datenstruktur.
Ansonsten sei p der Vorfahre von u und die Aussage gelte für p vor
dem Aufruf von LCA(u). Die einzigen Knoten, für die sich die LCAs
bezüglich u bzw. p unterscheiden, sind die Knoten im Unterbaum mit
Wurzel u. Von denen befindet sich aber nur u in der Datenstruktur.
Sven Grothklags (University of Paderborn)
DuA Übungsblatt 13
10. Juli 2006
7 / 13
Aufgabe 39 d)
Vor/nach jedem Schleifendurchlauf (Zeile 3 bis 6) während der
Bearbeitung von LCA(u) gilt, dass in ancestor [Find-Set(v )] der jüngste
gemeinsame Vorfahre von u und v für alle Knoten v , die sich aktuell in der
Union-Find-Datenstruktur befinden, steht.
Betrachte LCA(u) für einen Knoten u.
I
Nach Schleifendurchlauf mit Kind v :
Die Aussage gelte vor dem Schleifendurchlauf. Während des
Schleifendurchlaufs werden (gemäß des Hilfslemmas) alle Knoten des
Unterbaums mit Wurzel v der Menge, in der u sich befindet,
hinzugefügt. Für alle diese Knoten w gilt am Ende des Durchlaufs
ancestor [Find-Set(w )] = u, was der richtige LCA bezüglich u ist, da
alle diese Knoten Nachkommen von u sind.
Die LCAs aller anderen Knoten in der Union-Find-Datenstruktur
ändern sich dadurch nicht.
Sven Grothklags (University of Paderborn)
DuA Übungsblatt 13
10. Juli 2006
8 / 13
Aufgabe 39 e)
Bestimmen Sie die Laufzeit von LCA, wenn die Union-Find-Datenstruktur
aus der Vorlesung verwendet wird.
Sei n die Anzahl der Knoten des Baumes T und p = |P|.
Die Gesamtlaufzeit des Algorithmus LCA(root[T ]) lässt sich in drei Teile
aufteilen:
I Das reine Durchsuchen des Baumes geht in Zeit O(n).
I Die Ausgabe der LCAs (Zeile 8 bis 10) kann (aufsummiert über alle
Aufrufe von LCA) in Zeit O(p + n) durchgeführt werden (siehe 39a).
Dazu muss die Menge P ähnlich einer Adjazenzliste gespeichert sein.
I Nach Satz 16.8 verursachen die Mengenmanipulationen“ insgesamt
”
Aufwand O(p + n log n), da insgesamt n Make-Set-Aufrufe
stattfinden und ansonsten O(p + n) weitere Mengenoperationen
verwendet werden.
Der Gesamtaufwand ist also
O(p + n log n)
Sven Grothklags (University of Paderborn)
DuA Übungsblatt 13
10. Juli 2006
9 / 13
Aufgabe 40 a)
Beim Problem Münz-Minimierung besitzen Sie jeweils eine beliebig große
Menge von 10-, 5-, 2- und 1-Centmünzen. Gegeben ist weiter ein Betrag b.
Dieser Betrag soll mit möglichst wenigen Münzen bezahlt werden.
I
Entwerfen Sie einen Greedy-Algorithmus (in Pseudocode), der das
Problem Münz-Minimierung optimal löst.
Idee:
Durchlaufe die Münzen nach absteigender Wertigkeit.
Nimm so viele Münzen wie möglich von der aktuellen Münzsorte.
Coin-Minimization(b)
I
I
1 COINS ← {10, 5, 2, 1}
2 for i ← 1 to jlength[COINS]
k
3
4
5
do n ←
b
COINS[i]
print n ’ Münzen mit Wertigkeit ’ COINS[i]
b ← b − n · COINS[i]
Sven Grothklags (University of Paderborn)
DuA Übungsblatt 13
10. Juli 2006
10 / 13
Aufgabe 40 b)
Beweisen Sie die Optimalität Ihres Algorithmus.
Sei (n10 , n5 , n2 , n1 ) eine münz-minimale Auszahlung des Betrags b. Dann
gilt:
I n5 < 2, da ansonsten zwei 5er-Münzen durch eine 10er-Münze ersetzt
werden könnten.
I n2 < 3, da ansonsten drei 2er-Münzen durch eine 5er- und eine
1er-Münze ersetzt werden könnten.
I n1 < 2, da ansonsten zwei 1er-Münzen durch eine 2er-Münze ersetzt
werden könnten.
I ¬(n2 = 2 ∧ n1 = 1), da ansonsten die 2er- und 1er-Münzen durch eine
5er-Münze ersetzt werden könnten.
Maximal kann also mit der kleinsten (den zwei kleinsten, den drei
kleinsten) Münzsorte ein Betrag von 1 (4, 9) erreicht werden.
Sven Grothklags (University of Paderborn)
DuA Übungsblatt 13
10. Juli 2006
11 / 13
Aufgabe 40 b)
Beweisen Sie die Optimalität Ihres Algorithmus.
Sei (n10 , n5 , n2 , n1 ) eine münz-minimale Auszahlung des Betrags b. Dann
gilt:
I n5 < 2, da ansonsten zwei 5er-Münzen durch eine 10er-Münze ersetzt
werden könnten.
I n2 < 3, da ansonsten drei 2er-Münzen durch eine 5er- und eine
1er-Münze ersetzt werden könnten.
I n1 < 2, da ansonsten zwei 1er-Münzen durch eine 2er-Münze ersetzt
werden könnten.
I ¬(n2 = 2 ∧ n1 = 1), da ansonsten die 2er- und 1er-Münzen durch eine
5er-Münze ersetzt werden könnten.
Maximal kann also mit der kleinsten (den zwei kleinsten, den drei
kleinsten) Münzsorte ein Betrag von 1 (4, 9) erreicht werden.
Daraus folgt: Die optimale Lösung ist eindeutig und der Algorithmus
berechnet genau diese Lösung.
Sven Grothklags (University of Paderborn)
DuA Übungsblatt 13
10. Juli 2006
11 / 13
Aufgabe 40 c)
Bestimmen Sie die Laufzeit Ihres Algorithmus.
Coin-Minimization(b)
1 COINS ← {10, 5, 2, 1}
2 for i ← 1 to jlength[COINS]
k
3
4
5
do n ←
b
COINS[i]
print n ’ Münzen mit Wertigkeit ’ COINS[i]
b ← b − n · COINS[i]
Sei c die Anzahl der verfügbaren Münzsorten. Dann ist die Laufzeit
offensichtlich O(c).
Im konkreten Fall ist c = 4, die Laufzeit also O(1).
Sven Grothklags (University of Paderborn)
DuA Übungsblatt 13
10. Juli 2006
12 / 13
Aufgabe 40 c)
Bestimmen Sie die Laufzeit Ihres Algorithmus.
Coin-Minimization(b)
1 COINS ← {10, 5, 2, 1}
2 for i ← 1 to jlength[COINS]
k
3
4
5
do n ←
b
COINS[i]
print n ’ Münzen mit Wertigkeit ’ COINS[i]
b ← b − n · COINS[i]
Sei c die Anzahl der verfügbaren Münzsorten. Dann ist die Laufzeit
offensichtlich O(c).
Im konkreten Fall ist c = 4, die Laufzeit also O(1).
(All dieses gilt nur, wenn wir davon ausgehen, dass elementare
Rechenoperationen in konstanter Zeit ausgeführt werden können - egal,
wie groß die beteiligten Zahlen sind!)
Sven Grothklags (University of Paderborn)
DuA Übungsblatt 13
10. Juli 2006
12 / 13
Aufgabe 40 d)
Die Europäische Zentralbank plant die Einführung von 4-Centmünzen.
Arbeitet Ihre Greedy-Strategie dann immer noch optimal?
Coin-Minimization’(b)
1 COINS ← {10, 5, 4, 2, 1}
2 for i ← 1 to jlength[COINS]
k
3
4
5
do n ←
b
COINS[i]
print n ’ Münzen mit Wertigkeit ’ COINS[i]
b ← b − n · COINS[i]
Nein, die Greedy-Strategie liefert hier nicht immer eine optimale Lösung.
Aufruf Coin-Minimization’(8) liefert eine 5er-, eine 2er- und eine
1er-Münze. Optimal wären aber zwei 4er-Münzen.
Sven Grothklags (University of Paderborn)
DuA Übungsblatt 13
10. Juli 2006
13 / 13
Herunterladen