Dyamisches Programmiere Stad Stad der Dige: Dyamische Programmierug vermeidet Mehrfachberechug vo Zwischeergebisse Bei Rekursio eisetzbar Häufig eifache bottom-up Implemetierug möglich Das Subset Sum Problem: Algorithmus für schwieriges Problem Laufzeit hägt vo Eigabewert ab SS 28 9.Dyamisches Programmiere
Fraktioales Rucksack-Problem Gegebe sid Gegestäde. Der i-te Gegestad besitzt Wert v i ud Gewicht g i. Ausserdem ist eie Gewichtsschrake W gegebe. Zulässige Lösuge sid Zahle a i [, ] mit i= a i g i W. Gesucht ist eie zulässige Lösug möglichst großem Gesamtwert a K mit,, a i= a v. i i SS 26 9.Dyamisches Programmiere 2
Gierige Lösug des fraktioale Rucksack-Problems Algorithmus Gieriges-Eipacke:. Sortiere die Verhältisse v i / g i absteiged. Sei v π g v g Lv ( ) π( ) π( 2) π( 2) π( ) π( ) für Permutatio π auf (,,). 2. Bestimme maximales k, so dass och gilt gπ( i) W 3. Setze aπ( ) = aπ( 2) = L = aπ( ) = ud setze g k i=. a π ( k+ ) = W k i= gπ + ( k ) g π ( i). Alle adere a i setze auf. SS 26 9.Dyamisches Programmiere 3
Gieriges Eipacke ist optimal Satz 7.4: Gieriges Eipacke löst das fraktioale Rucksackproblem optimal. SS 26 9.Dyamisches Programmiere 4
Dyamisches Programmiere Rucksack Das Rucksackproblem: Rucksack mit begrezter Kapazität Objekte mit uterschiedlichem Wert ud uterschiedlicher Größe Wir wolle Objekte vo möglichst großem Gesamtwert mitehme SS 28 9.Dyamisches Programmiere 5
Dyamisches Programmiere Rucksack Rucksackgröße 6 Größe 5 2 3 7 4 Wert 5 2 8 4 9 SS 28 9.Dyamisches Programmiere 6
Dyamisches Programmiere Rucksack Rucksackgröße 6 Größe 5 2 3 7 4 Wert 5 2 8 4 9 Objekt ud 3 passe ud habe Gesamtwert 3 Optimal? SS 28 9.Dyamisches Programmiere 7
Dyamisches Programmiere Rucksack Rucksackgröße 6 Größe 5 2 3 7 4 Wert 5 2 8 4 9 Objekt ud 3 passe ud habe Gesamtwert 3 Optimal? Objekt 2, 3 ud 4 passe ud habe Gesamtwert 5! SS 28 9.Dyamisches Programmiere 8
Dyamisches Programmiere Rucksack Das Rucksackproblem (Optimierugsversio): Eigabe: Objekte {,,}; Objekt i hat gazz. pos. Größe g[i] ud Wert v[i]; Rucksackkapazität W Ausgabe: Mege S {,,} mit Σ g[i] W ud maximalem Wert Σ v[i] i S i S SS 28 9.Dyamisches Programmiere 9
Dyamisches Programmiere Rucksack Herleite eier Rekursio: Sei O optimale Lösug Bezeiche Opt(i,w) de Wert eier optimale Lösug aus Objekte bis i bei Rucksackgröße w Uterscheide, ob Objekt i O ist: Fall ( icht i O): Opt(,W) = Opt(-,W) Fall 2 ( i O): Opt(,W) = v[] + Opt(-,W-g[]) SS 28 9.Dyamisches Programmiere
Dyamisches Programmiere Rucksack Rekursio: Opt(i,)= für i Opt(,i)= für i W We w<g[i] da Opt(i,w) = Opt(i-,w) Sost, Opt(i,w) = max{opt(i-,w), v[i] + Opt(i-,w-g[i])} SS 28 9.Dyamisches Programmiere
Dyamisches Programmiere Rucksack Rekursio: Opt(i,)= für i Opt(,i)= für i W Kei Objekt passt i de Rucksack We w<g[i] da Opt(i,w) = Opt(i-,w) Sost, Opt(i,w) = max{opt(i-,w), v[i] + Opt(i-,w-g[i])} SS 28 9.Dyamisches Programmiere 2
Dyamisches Programmiere Rucksack Rekursio: Opt(i,)= für i Opt(,i)= für i W Kei Objekt steht zur Auswahl We w<g[i] da Opt(i,w) = Opt(i-,w) Sost, Opt(i,w) = max{opt(i-,w), v[i] + Opt(i-,w-g[i])} SS 28 9.Dyamisches Programmiere 3
Dyamisches Programmiere Rucksack Rekursio: Opt(i,)= für i Opt(,i)= für i W We w<g[i] da Opt(i,w) = Opt(i-,w) Passt aktuelles Objekt i de Rucksack? Sost, Opt(i,w) = max{opt(i-,w), v[i] + Opt(i-,w-g[i])} SS 28 9.Dyamisches Programmiere 4
Dyamisches Programmiere Rucksack Rekursio: Opt(i,)= für i Opt(,i)= für i W We w<g[i] da Opt(i,w) = Opt(i-,w) Sost, Opt(i,w) = max{opt(i-,w), v[i] + Opt(i-,w-g[i])} Sost, verwede Rekursio SS 28 9.Dyamisches Programmiere 5
Dyamisches Programmiere Rucksack Rucksack(,W). Iitialisiere Feld A[,..,][,..,W] mit A[,i] = für alle i ud A[j,]= für alle i W 2. for i to do 3. for j to W do 4. Bereche A[i,j] ach Rekursio 5. retur A[,W] SS 28 9.Dyamisches Programmiere 6
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 2 3 2 7 3 4 7 3 3 W SS 28 9.Dyamisches Programmiere 7
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 g[]>w: Also Opt(i,w) = Opt(i-,w) 2 3 2 7 3 4 7 3 3 W SS 28 9.Dyamisches Programmiere 8
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 Opt(i,w) = max{opt(i-,w), v[i] + Opt(i-,w-g[i])} 2 3 2 7 3 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 9
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 2 3 2 7 3 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 2
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 2 3 2 7 3 2 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 2
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 2 3 2 7 3 2 2 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 22
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 2 3 2 7 3 2 2 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 23
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 2 3 2 4 4 7 3 2 2 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 24
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 2 3 2 4 4 4 4 4 7 3 2 2 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 25
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 2 3 2 4 4 4 4 4 6 7 3 2 2 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 26
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 2 3 2 4 4 4 4 4 6 7 3 2 2 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 27
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 2 3 4 2 4 4 4 4 4 6 7 3 2 2 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 28
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 2 3 4 5 5 5 5 2 4 4 4 4 4 6 7 3 2 2 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 29
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 2 3 4 5 5 5 5 6 2 4 4 4 4 4 6 7 3 2 2 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 3
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 3 4 5 7 8 8 8 2 3 4 5 5 5 5 6 2 4 4 4 4 4 6 7 3 2 2 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 3
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 4 2 3 5 6 7 9 3 4 5 7 8 8 8 2 3 4 5 5 5 5 6 2 4 4 4 4 4 6 7 3 2 2 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 32
Dyamisches Programmiere Rucksack Größe Wert g v 5 2 2 3 5 6 7 9 2 3 4 2 3 5 6 7 9 3 4 5 7 8 8 8 2 3 4 5 5 5 5 6 2 4 4 4 4 4 6 7 3 2 2 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 33
Dyamisches Programmiere Rucksack Größe Wert g v 2 3 5 7 9 2 3 5 2 2 3 5 6 7 9 2 3 4 2 3 5 6 7 9 3 4 5 7 8 8 8 2 3 4 5 5 5 5 6 2 4 4 4 4 4 6 7 3 2 2 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 34
Dyamisches Programmiere Rucksack Größe Wert 2 3 5 7 9 2 3 g v 2 3 5 7 9 2 3 5 2 2 3 5 6 7 9 2 3 4 2 3 5 6 7 9 3 4 5 7 8 8 8 2 3 4 5 5 5 5 6 2 4 4 4 4 4 6 7 3 2 2 2 2 4 7 3 3 W SS 28 9.Dyamisches Programmiere 35
Dyamisches Programmiere Rucksack Größe Wert 2 3 5 7 9 2 3 5 7 9 2 3 5 6 7 9 2 3 5 6 7 9 2 3 2 3 3 4 5 7 8 8 8 4 5 5 5 5 6 4 4 4 4 4 6 2 2 2 2 Optimaler Lösugswert für W=8 2 g v 5 2 3 4 2 3 2 7 3 4 7 3 3 W SS 28 9.Dyamisches Programmiere 36
Dyamisches Programmiere Rucksack Größe Wert 2 3 5 7 9 2 3 5 7 9 2 3 5 6 7 9 2 3 5 6 7 9 2 3 2 3 3 4 5 7 8 8 8 4 5 5 5 5 6 4 4 4 4 4 6 2 2 2 2 Optimaler Lösugswert für W=8 2 g v 5 2 3 4 2 3 2 7 3 4 7 3 3 W SS 28 9.Dyamisches Programmiere 37
Dyamisches Programmiere Rucksack Satz 9.6 Algorithmus Rucksack berechet i Θ(W) Zeit de Wert eier optimale Lösug, wobei die Azahl der Objekte ist ud W die Größe des Rucksacks. SS 28 9.Dyamisches Programmiere 38
Dyamische Programmierug - APSP All Pairs Shortest Path (APSP): Eigabe: Gewichteter Graph G=(V,E) Ausgabe: Für jedes Paar vo Kote u,v V die Distaz vo u ach v sowie eie kürzeste Weg a b c d e f a 5 5 9 b 4 5 9 c -3 6 5 d -4 5 4 a 2 5 b -4 d 4 6 5 8 c e 7 - f e 5 8 9 - f SS 28 9.Dyamisches Programmiere 39
Dyamische Programmierug - APSP Zur Erierug: Sei G ei Graph ohe egative Zykle ud sei j vo i aus erreichbar. Da gibt es eie kürzeste i-j-weg, der keie Kote doppelt beutzt. Wir köe also aehme, dass jeder Kote i jedem Weg maximal eimal vorkommt Betrachte i-j-weg, der ur über Kote aus {,,k} läuft: k i j SS 28 9.Dyamisches Programmiere 4
Dyamische Programmierug - APSP Zur Erierug: Sei G ei Graph ohe egative Zykle ud sei j vo i aus erreichbar. Da gibt es eie kürzeste i-j-weg, der keie Kote doppelt beutzt. Wir köe also aehme, dass jeder Kote i jedem Weg maximal eimal vorkommt Betrachte i-j-weg, der ur über Kote aus {,,k} läuft: k Kote k tritt maximal eimal auf i j SS 28 9.Dyamisches Programmiere 4
Dyamische Programmierug - APSP Zur Erierug: Sei G ei Graph ohe egative Zykle ud sei j vo i aus erreichbar. Da gibt es eie kürzeste i-j-weg, der keie Kote doppelt beutzt. Wir köe also aehme, dass jeder Kote i jedem Weg maximal eimal vorkommt Betrachte i-j-weg, vo u der ach ur k über Kote aus {,,k} läuft: führt ur über Kote aus {,,k-} k i j SS 28 9.Dyamisches Programmiere 42
Dyamische Programmierug - APSP Zur Erierug: Sei G ei Graph ohe egative Zykle ud sei j vo i aus erreichbar. Da gibt es eie kürzeste i-j-weg, der keie Kote doppelt beutzt. Wir köe also aehme, dass jeder Kote i jedem Weg maximal eimal vorkommt Betrachte i-j-weg, der ur Weg über vo Kote k ach v aus {,,k} läuft: k führt ur über Kote aus {,,k-} i j SS 28 9.Dyamisches Programmiere 43
Dyamische Programmierug - APSP Kürzester i-j-weg über Kote aus {,,k} ist (a) kürzester i-j-weg über Kote aus {,,k-} oder (b) kürzester i-k-weg über Kote aus {,,k-} gefolgt vo kürzestem k-j-weg über Kote aus {,,k-} Fall (b): k i j SS 28 9.Dyamisches Programmiere 44
Dyamische Programmierug - APSP Die Rekursio: (k) Sei d ij die Läge eies kürzeste i-j-wegs mit Kote aus {,,k} (k) ij d = w ij, falls k= (k-) (k-) (k-) mi ( d, d + d ), falls k ij ik kj () () ij Matrix D =(d ) ethält die gesuchte Lösug SS 28 9.Dyamisches Programmiere 45
Dyamische Programmierug - APSP Floyd-Warshall(W,) (). D W 2. for k to do 3. for i to do 4. for j to do 5. d mi(d, d + d ) 6. retur D (k) ij () (k-) ij (k-) ik (k-) kj SS 28 9.Dyamisches Programmiere 46
Dyamisches Programmiere Rucksack Teile & Herrsche: Aufteile der Eigabe i mehrere Uterprobleme Rekursives löse der Uterprobleme Zusammefüge Gierige Algorithme: Kostruiere Lösug Schritt für Schritt I jedem Schritt optimiere eifaches, lokales Kriterium Dyamische Programmierug: Formuliere Problem rekursiv Vermeide mehrfache Berechug vo Teilergebisse Verwede bottom-up Implemetierug SS 28 9.Dyamisches Programmiere 47