Algorithmen und Datenstrukturen Lerneinheit : Dynamisches Programmieren Prof. Dr. Christoph Karg Studiengang Informatik Hochschule Aalen Sommersemester.. Einleitung Diese Lerneinheit widmet sich einer weiteren Programmiertechnik zur Bearbeitung von Optimierungsproblemen, dem Dynamischen Programmieren. Es werden folgende Fragen behandelt: Was ist die Idee hinter dynamischem Programmieren? Welche Voraussetzungen sind für dynamisches Programmieren notwendig? Was gibt es bei der Implementierung zu beachten? Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
Dynamisches Programmieren Der Begriff Programmierung steht für die schrittweise Berechnung einer Tabelle Schritte zur Entwicklung eines Algorithmus:. Charakterisierung der Struktur einer optimalen Lösung. Berechnung des Werts einer optimalen Lösung Top Down rekursiver Algorithmus Bottom Up iterativer Algorithmus. Erweiterung des Algorithmus zur Konstruktion einer optimalen Lösung Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 Fertigungsplanung Linie Station S, Station S, Station S, Station S,n Station S,n a, a, a, a,n a,n e x A t, t, t,n E t, t, t,n e x a, a, a, a,n a,n Station S, Station S, Station S, Station S,n Station S,n Linie Aufgabe: Finde schnellste Produktionsroute Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
Fertigungsplanung (Forts.) Zur Herstellung eines Produkts sind n Arbeitsschritte notwendig Die Arbeitsschritte müssen sequentiell durchlaufen werden Zwei Fertigungslinien mit jeweils n Stationen stehen bereit: Linie : S,, S,,..., S,n Linie : S,, S,,..., S,n In der Regel durchläuft ein Produkt während der Herstellung eine der beiden Linien Für Expressbestellungen kann während der Produktion die Linie gewechselt werden Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 Fertigungsplanung (Forts.) Fertigungszeiten für Linie i =, : Bereitstellungszeit e i : Rohling betritt die Linie Bearbeitungszeit a i,j in Station j, j =,..., n: Dauer des j -ten Fertigungsschritts in Linie i Beendigungszeit x i : fertiges Produkt verläßt die Linie Die Dauer des Transports von Station j zu Station j + innerhalb derselben Linie ist vernachlässigbar Wechsel der Produktionslinien t,j : Dauer des Wechsels von S,j nach S,j + t,j : Dauer des Wechsels von S,j nach S,j + Aufgabe: Optimierung der Produktionszeit für Expressbestellungen Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
Fertigungsplanung (Beispiel) Linie S, S, S, S, S, S, 7 9 8 A E 8 7 S, S, S, S, S, S, Linie Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 7/8 Idee zur Berechnung des Optimums Optimum zu Station S,j S,j S,j a,j a,j A Alternativen t,j a,j S,j Optimum zu Station S,j Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 8/8
Rekursiver Ansatz Ziel: Rekursive Definition einer optimalen Lösung f f i [j ] bezeichnet die Zeit um auf schnellsten Weg vom Produktionsbeginn zum Ende von Station S i,j zu gelangen Die Produktion beginnt bei Station S, oder S, : f [] = e + a, f [] = e + a, Ein Produkt muss alle n Stationen von Linie oder durchlaufen: f = min{f [n] + x, f [n] + x } Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 9/8 Rekursiver Ansatz (Forts.) Zwei Alternativen für den schnellsten Weg zu Station S,j wobei j =,,..., n: Direkter Weg von S,j : v = f [j ] + a,j Transfer von Station S,j der Linie auf Linie : v = f [j ] + t,j + a,j Der schnellste Weg verursacht minimale Kosten: f [j ] = min{v, v } Analoge Berechnung für f [j ] Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
Rekursiver Ansatz (Forts.) Rekursionsgleichung zur Berechnung von f [j ]: { e + a, j = f [j ] = min{f [j ] + a,j, f [j ] + t,j + a,j } j Rekursionsgleichung zur Berechnung von f [j ]: { e + a, j = f [j ] = min{f [j ] + a,j, f [j ] + t,j + a,j } j Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 Korrektheit des Verfahrens Satz: Für alle i {, } und alle j {,..., n} ist f i [j ] die kürzeste Produktionszeit bis zu Station S i,j. Beweis. Induktion über n. j = : Da die Werte f [] = e + a, und f [] = e + a, die einzig möglichen sind, sind sie optimal. j j : Sei i = und w die minimale Produktionszeit bis zu Station S i,j. Betrachte den durch die Rekursion berechneten Wert f [j ]. w f [j ]: Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
Korrektheit des Verfahrens (Forts.) w f [j ]: Angenommen, die optimale Produktionsroute zu S,j führt über S,j. Da laut Annahme f [j ] und f [j ] optimal sind, gilt: w f [j ] + a,j f [j ] Führt der optimale Weg über S,j, dann gilt: w f [j ] + t,j + a,j f [j ] Insgesamt: w = f [j ]. Der rekursiv berechnete Wert ist also optimal. Analog: i = Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 Erweiterung: Berechnung des besten Weges l i [j ] bezeichnet die Nummer der Produktionslinie deren Station S li [j ],j auf dem schnellsten Weg zu S i,j liegt l bezeichnet die Linie, deren n-te Station auf dem schnellsten Produktionsweg liegt Die Werte l i [j ] für i =, und j =,,..., n sind ein Nebenprodukt der Berechnung obiger Rekursionsgleichungen Beachte: l i [] ist nicht definiert Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
Rekursiver Algorithmus RecF(i, j, e, a, t) Output: f i [j ] if i = then if j = then return e + a, else v := RecF(, j, e, a, t) + a,j v := RecF(, j, e, a, t) + t,j + a,j Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 Rekursiver Algorithmus 7 if v v then 8 l [j ] := 9 return v else l [j ] := return v else Analog für i = Ergebnis: f = min{recf(, n, e, a, t) + x, RecF(, n, e, a, t) + x } Die optimale Route wird intern im Array l gespeichert. Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
Beispiel Linie S, S, S, S, S, S, 7 9 8 A E 8 7 S, S, S, S, S, S, Linie j f [j] 9 8 f [j] 7 Ergebnis: f = 8, l = j l [j] l [j] Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 7/8 Laufzeit des rekursiven Algorithmus Laufzeit: Für die Anzahl T (n) der rekursiven Aufrufe von RecF(i, n, e, a, t) gilt: { n = T (n) = T (n ) n Somit: Laufzeit von RecF(i, n, e, a, t) ist Θ( n ) Fazit: rekursiver Algorithmus unbrauchbar Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 8/8
Grund für die Ineffizienz f f [n] f [n] f [n ] f [n ] f [n ] f [n ] f [n ] f [n ] f [n ] f [n ] f [n ] f [n ] f [n ] f [n ] Unnötiger Aufruf Problem: Die meisten rekursiven Aufrufe sind unnötig Lösung: Speichere bereits berechnete Werte in einer Tabelle ( Memoization) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 9/8 Modifizierter Algorithmus MemoRecF(i, j, e, a, t) Output: f i [j ] if f i [j ] < then return f i [j ] else if i = then if j = then return e + a, 7 else 8 v := MemoRecF(, j, e, a, t) + a,j 9 v := MemoRecF(, j, e, a, t) + t,j + a,j Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
Rekursiver Algorithmus if v v then f [j ] := v l [i] := return v else f [j ] := v l [i] := 7 return v 8 else 9 Analog für i = Laufzeit: O(n), da die Anzahl der rekursiven Aufrufe gleich n ist Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 Optimale Teilstruktur Optimale Teilstruktur Eigenschaft: Jede optimale Lösung eines Problems enthält optimale Lösungen für die im Problem enthaltenen Teilprobleme Das Problem Fertigungsplanung besitzt diese Eigenschaft, denn der schnellste Weg zu S,j ist entweder der schnellste Weg zu S,j und direkt weiter zu S,j, oder der schnellste Weg zu S,j und ein Wechsel von Linie zu Linie, also zu S,j Analog für S,j Die Optimale Teilstruktur Eigenschaft ermöglicht eine effiziente Berechnung einer optimalen Lösung. Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
Iterativer Algorithmus IterativeF(n, e, a, t, x) f [] := e + a, f [] := e + a, for j := to n do if f [j ] + a,j f [j ] + t,j + a,j then f [j ] := f [j ] + a,j l [j ] := 7 else 8 f [j ] := f [j ] + t,j + a,j 9 l [j ] := Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 Iterativer Algorithmus (Forts.) if f [j ] + a,j f [j ] + t,j + a,j then f [j ] := f [j ] + a,j l [j ] := else f [j ] := f [j ] + t,j + a,j l [j ] := if f [n] + x f [n] + x then 7 f := f [n] + x 8 l := 9 else f := f [n] + x l := Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
Bemerkungen zu IterativeF IterativeF() berechnet die Tabellen f und l in Bottom Up Manier In der for-schleife in Zeilen werden die Tabellen schrittweise unter Verwendung der Rekursionsgleichungen berechnet Die if-anweisung in Zeilen dient zur Berechnung der optimalen Werts Die Laufzeit von IterativeF() ist Θ(n), also linear in der Anzahl der Stationen einer Produktionslinie Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 Ausgabe des schnellsten Pfads Nach Aufruf von IterativeF() enthält die l-tabelle alle Informationen um den schnellen Produktionspfad auszugeben. PrintStations(l, n) for j := to n do i := l i [j ] print Linie i, Station j i := l print Linie i, Station n Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
Matrizenmultiplikation Eine n m Matrix A ist eine Tabelle mit m Zeilen und n Spalten: a, a,... a,m a,m a, a,... a,m a,m A =.. a n, a n,... a n,m a n,m Zwei Matrizen A und B kann man multiplizieren, falls die Anzahl der Spalten von A gleich der Anzahl der Zeilen von B ist Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 7/8 Matrizenmultiplikation (Forts.) Ist A eine n m Matrix und B eine m l Matrix, dann ist das Produkt C = A B eine n l, wobei c i,j = m a i,k b k,j k= für i =,,..., n und j =,,..., l Falls man A und B multiplizieren kann, dann nennt man A und B (multiplikations-) kompatibel Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 8/8
Algorithmus MatrixMultiply(A, B) MatrixMultiply(A, B) Input: Matrizen A und B Output: Matrix C = A B, falls Produkt berechenbar if columns(a) rows(b) then print Dimensionen nicht kompatibel else for i := to rows(a) do for j := to columns(b) do C[i, j ] := 7 for k := to columns(a) do 8 C[i, j ] := C[i,j ] + A[i, k] B[k, j ] 9 return C Laufzeit: O(rows(A) columns(b) columns(a)) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 9/8 Assoziativität der Matrixmultiplikation Gegeben: Matrizen A, A,..., A n, wobei A i und A i+ für alle i =,,..., n kompatibel sind Zur Berechnung von C = A A... A n müssen n Matrixmultiplikationen durchgeführt werden Da die Matrixmultiplation assoziativ ist, ist die Reihenfolge der Multiplikationen (aus mathematischer Sicht) irrelevant Die Reihenfolge beeinflusst jedoch den Aufwand zur Berechnung der Multiplikationen Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
Kettenmultiplikation von Matrizen Matrizen-Kettenmultiplikation steht für das folgende Optimierungsproblem: Gegeben: Eine Folge (Kette) von Matrizen A, A,..., A n, wobei A i die Dimension p i p i hat Aufgabe: Berechne das Produkt A A... A n mit minimalem Aufwand Beispiel: Betrachte die Matrizen A, A und A mit Dimension, und (A (A A )) 7 Multiplikationen ((A A ) A ) 7 Multiplikationen Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 Anzahl verschiedener Klammerungen Frage: Auf wieviele verschiedene Arten kann n Matrizen klammern? Die Anzahl P(n) der Klammerungen ist { n = P(n) = n k= P(k) P(n k) n Es gilt: P(n) = Ω( n ) Fazit: Alle Klammerungen zu analysieren, um die Matrix Kettenmultiplikation optimal zu berechnen, ist nicht effizient. Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
Lösung mittels dynamischem Programmieren Die optimale Klammerung kann mittels dynamischem Programmieren berechnet werden. Vier Schritte:. Analyse der Struktur einer optimalen Klammerung. Rekursive Berechnung der Anzahl Skalarmultiplikationen der optimalen Klammerung. Berechnung der Anzahl Skalarmultiplikationen durch schrittweise Berechnung einer Tabelle. Berechnung der optimalen Klammerung Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 Schritt : Strukturanalyse Betrachte eine optimale Klammerung für A i A i+... A j wobei i < j n: Die Klammerung teilt das Produkt A i A i+... A j in zwei Hälften A i A i+... A k und A k+... A j wobei i k < j Die Klammerung von A i A i+... A k ist optimal. Andernfalls könnte man die optimale Klammerung für A i A i+... A j verbessern Die Klammerung von A k+... A j ist ebenfalls optimal Fazit: Matrix Kettenmultiplikation besitzt die Optimale Teilstruktur Eigenschaft Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
Schritt : Rekursive Berechnung des Optimums Definiere A i..j = A i A i+... A j wobei i j Sei m[i, j] die minimale Anzahl Skalarmultiplikationen die zur Berechnung von A i..j notwendig sind Es gilt: A i..j = A i..k A k+..j für k = i, i +,..., j Der Aufwand zur Berechnung von A i..k A k+..j ist m[i, k] + m[k +, j] + p i p k p j Rekursive Berechnung von m[i, j]: { i = j m[i, j] = min i k<j {m[i, k] + m[k +, j] + p i p k p j } i < j Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 Schritt : Berechnung der Lösung In s[i, j] wird die Stelle k gespeichert, an der A i..j zerlegt wird Die direkte Implementierung der Rekursionsgleichung ist ineffizient Zur Berechnung werden die Werte m[i, j] für i j n benötigt Die Anzahl der m s ist ( n ) + n = Θ(n ) Die m s werden in einer Dreiecksmatrix gespeichert Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
Algorithmus MatrixChainOrder(p) MatrixChainOrder(p) Input: Dimensionsfolge p = p, p,..., p n Output: Tabelle m und s n := length(p) for i := to n do m[i, i] := for l := to n do for i := to n l + do j := i + l 7 m[i, j ] := Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 7/8 Algorithmus MatrixChainOrder(p) 8 for k := i to j do 9 q := m[i, k] + m[k +, j ] + p i p k p j if q < m[i, j ] then m[i, j ] := q s[i, j ] := k return m und s Laufzeit: Θ(n ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 8/8
Schritt : Berechnung der optimalen Klammerung Die korrekte Klammerung wird anhand der Tabelle s berechnet: PrintOptimalParens(s, i, j ) if i = j then print A[ i ] else print ( PrintOptimalParens(s, i, s[i, j ]) PrintOptimalParens(s, s[i, j ] +, j ) 7 print ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 9/8 Beispiel für Matrix Kettenmultiplikation Gegeben sind die Matrizen A, A,..., A mit folgenden Dimensionen: Matrix Dimension A A A A A A Eingabe für MatrixChainOrder(p): p =,,,,,, Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
i A ( ) A ( ) A ( ) A ( ) A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 i 7 A ( ) A ( ) A ( ) A ( ) + + = 7 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
i 7 A ( ) A ( ) A A ( ) ( ) + + = A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 i 7 7 A ( ) A ( ) A A ( ) ( ) + + = 7 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
i 7 7 A ( ) A ( ) A A ( ) ( ) + + = A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 i 7 7 A ( ) A ( ) A A ( ) ( ) + + = A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
i 7 787 7 A ( ) A ( ) A ( ) A ( ) + + = 787 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 7/8 i 7 787 7 A ( ) A ( ) A ( ) A ( ) 7 + + = 8 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 8/8
i 7 787 7 A ( ) A ( ) A ( ) A ( ) + 7 + = A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 9/8 i 7 787 7 7 A ( ) A ( ) A ( ) A ( ) + + = 7 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
i 7 787 7 7 A ( ) A ( ) A ( ) A ( ) + + = A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 i 7 787 7 7 A ( ) A ( ) A ( ) A ( ) 7 + + = 7 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
i 7 787 7 7 A ( ) A ( ) A ( ) A ( ) + + = A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 i 7 787 7 7 A ( ) A ( ) A ( ) A ( ) + + = A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
i 7 787 87 7 7 A ( ) A ( ) A ( ) A ( ) + 7 + = 87 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 i 7 787 87 7 7 A ( ) A ( ) A ( ) A ( ) 7 + 7 + = A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
i 7 787 97 7 7 A ( ) A ( ) A ( ) A ( ) 787 + + = 97 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 7/8 i 7 787 97 7 7 A ( ) A ( ) A ( ) A ( ) + + = A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 8/8
i 7 787 97 7 7 7 A ( ) A ( ) A ( ) A ( ) + + = 7 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 9/8 i 7 787 97 7 7 7 A ( ) A ( ) A ( ) A ( ) 7 + + = 7 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
i 7 787 97 7 7 7 7 A ( ) A ( ) A ( ) A ( ) + + = 7 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 i 7 787 97 7 7 7 7 A ( ) A ( ) A ( ) A ( ) 7 + + = 9 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
i 7 787 97 7 7 7 7 A ( ) A ( ) A ( ) A ( ) + + = A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 i 7 787 97 8 7 7 7 7 A ( ) A ( ) A ( ) A ( ) + 7 + = 8 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
i 7 787 97 7 7 7 7 7 A ( ) A ( ) A ( ) A ( ) A ( ) 7 + + = 7 A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8 i 7 787 97 87 7 7 7 7 A ( ) A ( ) A ( ) A ( ) 787 + + = 87 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen /8
i 7 787 97 87 7 7 7 7 A ( ) A ( ) A ( ) A ( ) 97 + + = 7 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 7/8 i 7 787 97 87 7 7 7 8 7 A ( ) A ( ) A ( ) A ( ) + 7 + = 8 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 8/8
i 7 787 97 87 7 7 7 7 A ( ) A ( ) A ( ) A ( ) + + = A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 9/8 i 7 787 97 87 7 7 7 7 A ( ) A ( ) A ( ) A ( ) 7 + + = 8 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 7/8
i 7 787 97 87 7 7 7 7 A ( ) A ( ) A ( ) A ( ) 7 + + = A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 7/8 7 787 97 87 7 7 7 7 i 7 A ( ) A ( ) A ( ) A ( ) + + = 7 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 7/8
7 787 97 87 7 7 7 7 i 7 A ( ) A ( ) A ( ) A ( ) A ( ) 7 + 7 + = 7 A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 7/8 7 787 97 87 7 7 7 i 7 A ( ) A ( ) A ( ) A ( ) 787 + + = A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 7/8
7 787 97 87 7 7 7 i 7 A ( ) A ( ) A ( ) A ( ) 97 + + = 87 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 7/8 7 787 97 87 7 7 7 i 7 A ( ) A ( ) A ( ) A ( ) 87 + + = 87 A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 7/8
7 787 97 87 7 7 7 i 7 A ( ) A ( ) A ( ) A ( ) A ( ) A ( ) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 77/8 Berechnung der optimaler Klammerung: A[..] = (A[..])(A[..]) da s[,]= = ((A[])(A[..]))(A[..]) da s[,]= = ((A[])((A[])(A[])))(A[..]) da s[,]= = ((A[])((A[])(A[])))((A[..])(A[])) da s[,]= = ((A[])((A[])(A[])))(((A[])(A[]))(A[])) da s[,]= Bemerkung: A[i..j] steht für A i... A j Optimale Klammerung: ((A (A A ))((A A )A )) Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 78/8
Anwendbarkeit von dynamischem Programmieren Ein Optimierungsproblem ist mittels dynamischem Programmieren effizient lösbar, wenn es zwei Eigenschaften besitzt: Optimale Teilstruktur: Die optimale Lösung eines Problems enthält optimale Lösungen für die im Problem enthaltenen Teilprobleme Überlappende Teilprobleme: Die Menge der Teilprobleme zur rekursiven Berechnung der optimalen Lösung ist klein, d.h., polynomial in der Größe des Problems Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 79/8 Zusammenfassung Dynamisches Programmieren ist eine Technik zur Bearbeitung von Optimierungsproblemen Die Technik besteht darin, eine Tabelle mit Teillösungen zu berechnen und auf Basis dieser eine optimale Lösung zu ermitteln Dynamisches Programmieren eignet sich für Optimierungsprobleme mit der Optimale Teilstruktur Eigenschaft Dynamisches Programmieren wird auch als Heuristik für schwer zu handhabende Optimierungsprobleme eingesetzt Prof. Dr. C. Karg: Algorithmen und Datenstrukturen 8/8