DAP2 Präsenzübung 6
Transcription
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