Algorithmen und Datenstrukturen 2

Ähnliche Dokumente
Algorithmen und Komplexität

Algorithmen und Datenstrukturen 2

19. Dynamic Programming I

Dynamische Programmierung

Algorithmen und Datenstrukturen 2

Datenstrukturen & Algorithmen

19. Dynamic Programming I

Algorithmen und Datenstrukturen

Wiederholung. Divide & Conquer Strategie

Algorithmen und Datenstrukturen 1 Kapitel 3

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Kryptographische Protokolle

Datenstrukturen und Algorithmen. Christian Sohler FG Algorithmen & Komplexität

19. Dynamic Programming I

Top-down Bottom-up Divide & Conquer Dynamisches Programmieren Caching (Memoization) Branch-and-Bound Greedy

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Algorithmen und Datenstrukturen

Divide & Conquer. Problem in Teilprobleme aufteilen Teilprobleme rekursiv lösen Lösung aus Teillösungen zusammensetzen

21. Greedy Algorithmen. Aktivitätenauswahl, Fractional Knapsack Problem, Huffman Coding Cormen et al, Kap. 16.1, 16.3

Teil I. Lineare Algebra I Vorlesung Sommersemester Olga Holtz. MA 378 Sprechstunde Fr und n.v.

Übersicht. Aktivitäten-Auswahl-Problem. Greedy Algorithmen. Aktivitäten-Auswahl-Problem. Aktivitäten-Auswahl-Problem. Datenstrukturen & Algorithmen

Einführung in die Objektorientierte Programmierung Vorlesung 17: Dynamische Programmierung. Sebastian Küpper

5.4 Das Rucksackproblem

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8

2. Entsprechende Listen P i von Vorgängern von i 3. for i := 1 to n do. (ii) S i = Knoten 2 + 1}

Übung Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Hallo Welt für Fortgeschrittene

Algorithmentheorie. 10 Greedy Verfahren

11. Übung Algorithmen I

Datenstrukturen und Algorithmen

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion

12.4 Traveling Salesman Problem

16. All Pairs Shortest Path (ASPS)

Dynamische Programmierung

bekannt: Eliminationsverfahren von Gauß Verfahren führt zu einer Zerlegung der Koeffizientenmatrix: A = LR A = LR

Das Problem des Handlungsreisenden

Effiziente Algorithmen 2

2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten.

Algorithmen und Datenstrukturen

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

4 Rekursionen. 4.1 Erstes Beispiel

Übung Algorithmen und Datenstrukturen

Algorithmische Bioinformatik 1

Das Divide - and - Conquer Prinzip. Quicksort Formulierung und Analyse des Prinzips Geometrisches Divide and Conquer - Closest-Pair - Segmentschnitt

Grundlagen: Algorithmen und Datenstrukturen

Dynamische Programmierung. Problemlösungsstrategie der Informatik

Numerik I. Universität zu Köln SS 2009 Mathematisches Institut Prof. Dr. C. Tischendorf Dr. M. Selva,

5. Bäume und Minimalgerüste

Ein Dieb raubt einen Laden aus; um möglichst flexibel zu sein, hat er für die Beute nur einen Rucksack dabei

Greedy Algorithms - Gierige Algorithmen

Algorithmik WS 07/ Vorlesung, Andreas Jakoby Universität zu Lübeck

Kryptographische Protokolle

Optimierung. Algorithmik III Algorithmen und Modelle für kontinuierliche Datenstrukturen. Vorgehen: Dynamische Programmierung

14. Sortieren II Heapsort. Heapsort. [Max-]Heap 7. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

Relationen und DAGs, starker Zusammenhang

Kapitel 2. Weitere Beispiele Effizienter Algorithmen

Der Dreyfus-Wagner Algorithmus für das Steiner Baum Problem

6. Algorithmen auf Zeichenketten

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

Dynamisches Programmieren - Problemstruktur

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 9, Donnerstag 18.

Vorlesung Datenstrukturen

LR Zerlegung. Michael Sagraloff

Algorithmen und Datenstrukturen (für ET/IT)

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Ein sortiertes Feld kann in O(log n) durchsucht werden, z.b. mit Binärsuche. Der Algorithmus 1 gibt den Pseudocode der binären Suche an.

3.2. Divide-and-Conquer-Methoden

Algorithmen und Datenstrukturen

Präfix-Summe. Das Schweizer Offiziersmesser der Parallelen Algorithmen. Parallele Rechenmodelle Präfix-Summe Brents Lemma Anwendungen

3.3 Optimale binäre Suchbäume

1 Einführung. 2 Grundlagen von Algorithmen. 3 Grundlagen von Datenstrukturen. 4 Grundlagen der Korrektheit von Algorithmen

Graphenalgorithmen und lineare Algebra Hand in Hand Prof. Dr. Henning Meyerhenke

Algorithmen I - Tutorium 28 Nr. 2

8. Sortieren II. 8.1 Heapsort. Heapsort. [Max-]Heap 6. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

Heapsort, Quicksort, Mergesort. 8. Sortieren II

Multiplikation von Matrizen

Lösungsvorschlag Serie 2 Rekursion

Aufgabe 8. 1 Arbeitsweise illustrieren. 2 Korrektheitsbeweis führen. 3 Laufzeitanalyse durchführen.

Transkript:

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