Dynamisches Programmieren WS13-14

Aus ProgrammingWiki
< AuK
Archivierte Version vom 2013-11-05T10:21:01+00:00. Aktuelle Version

Inhaltsverzeichnis

Autoren

Jens Klinger

Daniel Franke


Einführung

Das Prinzip "Teile und Herrsche" dient als Grundlage für viele Algorithmen: Um ein umfangreiches Problem zu lösen, zerlegt man es in kleinere Teilprobleme, die unabhängig voneinander gelöst werden können. In der dynamischen Programmierung wird dieses Prinzip aufgegriffen und weiterentwickelt. Wissen wir nicht genau welche kleineren Probleme zu lösen sind, berechnen wir all diese Teilprobleme und speichern die Ergebnisse zur Verwendung bei der Lösung größerer Probleme, in einer Tabelle. Der Begriff "Programmieren" bezieht sich hierbei eher auf das Formulieren von Problemstellungen und das erstellen einer Tabelle. Deshalb wird oftmals auch von "Dynamischer Optimierung" gesprochen.

Bei der Anwendung der dynamischen Programmierung können immer folgende Probleme auftreten:

  1. Es ist nicht immer möglich, die Lösungen kleinerer Probleme so zu kombinieren, dass sich die optimale Lösung eines größeren Problems ergibt.
  2. Die Anzahl der zu lösenden Teilprobleme kann unvertretbar groß werden.


Vorgehensweise

Die Entwicklung eines dynamischen Programms kann in vier Schritte unterteilt werden:

  1. Charakterisierung der Struktur eines Programms.
  2. Definieren des Wertes einer optimalen Lösung rekursiv.
  3. Berechnung des Wertes einer optimalen Lösung durch den bottom-up-Ansatz.
  4. Konstruktion einer zugehörigen optimalen Lösung aus den schon berechneten Daten.


Bottom-Up

Iterative versus rekursive Berechnung

Rundreiseproblem

Aufwandsbetrachtung und Einsatzgebiete

Fazit