DAP2 Präsenzübung 6

C. Sohler
J. Flake, A. Krivo²ija
R. Penninger, B. Rudak, V.Volz
SoSe 2015
DAP2 Präsenzübung 6
Besprechung: 20.05.2015 22.05.2015
: (Dynamische Programmierung)
Diana möchte sich eine Halskette mit der exakten Länge n cm basteln. Sie will dazu farbige
Holzstäbchen verwenden, die in Form von hohlen Zylindern vorliegen. Die farbigen Holzstäbchen
werden zu einer Kette aneinandergereiht, indem eine Schnur durch die Holzstäbchen hindurch
geführt und die Schnurenden verknotet werden. Es gibt k verschiedene Sorten von Holzstäbchen,
die alle verschiedene ganzzahlige Längen besitzen: (in cm) d , d , . . . , d . Von jeder Sorte stehen
beliebig viele Holzstäbchen zur Verfügung. Es dürfen von einer Sorte auch mehrere in der Kette
vorhanden sein. Diana möchte aus Kostengründen möglichst wenige Holzstäbchen benutzen.
a) Finden Sie eine rekursive Form für die kleinste Anzahl an Holzstäbchen, mit denen eine
Halskette der Länge n gebastelt werden kann.
b) Geben Sie (in Pseudocode) einen auf dynamischer Programmierung beruhenden Algorithmus an, der die kleinste Anzahl von Holzstäbchen bestimmt, mit denen die Halskette
realisiert werden kann, bzw. anzeigt, falls keine Lösung existiert.
c) Zeigen Sie die Korrektheit der in Teilaufgabe a) angegebenen rekursiven Form.
d) Analysieren Sie die Laufzeit Ihres Algorithmus.
Präsenzaufgabe 6.1
1
2
k
Unsere Problemstellung kann wie folgt beschrieben werden:
Die Länge n der zu bastelnden Halskette und die Längen d , . . . , d der k verschiedenen Sorten von Holzstäbchen.
Gesucht: Eine minimale Anzahl von Holzstäbchen, deren Längen sich zu n aufaddieren,
wobei Holzstäbchen derselben Sorte auch mehrfach vorkommen dürfen.
Formal ist also das folgende Minimierungsproblem zu lösen:
Lösung:
Gegeben:
Ziel:
1
k
X
i=1
k
X
xi · di = n
xi → min
i=1
x1 , . . . , x k ∈ N
1
k
.
a) Wir können die minimale Anzahl von Holzstäbchen M (n) für eine Halskette der Länge
n in der folgenden Weise rekursiv berechnen:
(
0
falls n = 0
M (n) =
min {1 + M (n − d ) | i ∈ {1, . . . , k} , d ≤ n} falls n > 0
(Man beachte, dass hier min ∅ := ∞ deniert ist.)
b) Auf der Basis der rekursiven Denition ergibt sich das folgende dynamische Programm
zur Berechnung von M für die Halskettenlänge n:
CountStaebchen(Array D, n) â D[1..k] enthält die Längen d , . . . , d :
1 Array M [0..n]
i
i
1
2
3
4
5
6
7
8
k
â In M [m] wird minimale Anzahl der benötigten Stäbchen für Länge m
gespeichert
M [0] ← 0
for l ← 1 to n do
M [l] ← ∞
for i ← 1 to k do
if (D[i] ≤ l) & (1 + M [l − D[i]] < M [l]) then
M [l] ← 1 + M [l − D[i]]
return M [n]
Das dynamische Programm setzt die rekursive Denition von M direkt um. Da nur auf
schon berechnete Feldelemente M [l] zugegrien wird, folgt die Korrektheit des Algorithmus aus der Korrektheit der rekursiven Denition von M .
c) Wir zeigen die Korrektheit der rekursiven Form mittels vollständiger Induktion.
Die minimale Anzahl an Holzstäbchen für eine Kette der Länge 0
ist trivialerweise 0.
Für alle i < n berechnet M (i) die minimale Anzahl an
Holzstäbchen für Ketten der Länge i korrekt.
Sei M (n) der nach der Rekursionsformel berechnete Wert.
M (n) = ∞ Dann gibt es entweder kein Stäbchen mit einer Länge ≤ n, in
diesem Fall liefert M (n) den korrekten Wert, oder aber für jedes Stäbchen mit
einer Länge d < n gilt M (n − d ) = ∞. Da nach Induktionsvoraussetzung
M (n − d ) korrekt die minimale Anzahl Stäbchen berechnet, heiÿt dies, dass
eine Kette der Länge n − d mit den vorhandenen Stäbchen nicht realisierbar
ist. Dann ist aber auch eine Kette der Länge n nicht realisierbar, so dass M (n)
den korrekten Wert liefert.
M (n) < ∞ Es gilt dann für ein i mit 1 ≤ i ≤ k M (n) = 1 + M (n − d ).
Für alle j 6= i, 1 ≤ i ≤ k, gilt M (n − d ) ≤ M (n − d ).
Angenommen, eine Kette der Länge n könnte mit c < M (n) = 1 + M (n − d )
Stäbchen realisiert werden. Dann würde
Induktionsanfang
Induktionsvoraussetzung
Induktionsschluss
Fall 1:
:
i
i
i
i
Fall 2:
:
i
i
j
i
c ≤ M (n − dj )
2
für 1 ≤ j ≤ k gelten. Für ein Stäbchen der Länge d , das in der Lösung mit c
Stäbchen verwendet worden ist, gilt dann, dass c − 1 < M (n − d ) Stäbchen zur
Realisierung einer Kette der Länge n − d genügen, im Widerspruch dazu, dass
M (n − d ) nach Induktionsvoraussetzung den optimalen Wert berechnet.
d) Es ist leicht zu sehen, dass die Laufzeit des Algorithmus in O(kn) liegt. Dabei ist k eine
Konstante.
j
j
j
j
3