Dynamisches Programmieren WS15-16

Aus ProgrammingWiki
Archivierte Version vom 2016-01-17T16:03:39+00:00. Aktuelle Version

Inhaltsverzeichnis

Leonard Mory, Frank Ehrlich, Alexander Preuss

Thematischer Einstieg und Motivation

Was ist dynamisches Programmieren?

  • Kein Algorithmus, eher eine Lösungsstrategie
  • Begriff kommt aus der Zeit, wo Programmieren Tabellenmethoden bezeichnete
  • Optimierungsverfahren, kein Programmieren
  • "Teile und Herrsche" dient als Grundlage
    • Um ein umfangreiches Problem zu lösen, wird es in kleine Teilprobleme zerlegt
    • Diese werden unabhängig von einander gelöst und in eine Tabelle geschrieben
  • Anders als bei "Teile und Herrsche" wird bei dem Dynamischen Programmieren ein Bottom-up-Ansatz verwendet

Bottom-up

Optimalitätskriterium


Dynamisches Programmieren vs Memoizing

  • beide vermeiden wiederholte Berechnung durch Speichern
    • ⇒Tradeoff: Speicher statt Zeit
MemoizationDynamisches Programmieren
Top-Down, Depth-First AnsatzBottom-Up, Breadth-First Ansatz
Beschreibung bleibt unverändertBeschriebung wird verändert
Vermeidet unnötige BerechnungenKann unnötige Berechnungen nicht vermeiden
Kann Speicher leicht verschwendenKann Speicher einsparen, indem unnötige Resultate vermieden werden
Muss prüfen ob Berechnung bereits vorliegtkeine Prüfung nötig durch neue Beschreibung
Komplexität hängt von Schnelligkeit des "Nachschlagens" abKomplexität hängt von Speichermethode ab


Vergleich anhand Fibonacciberechnung

Rucksackproblem

Memorizing

rekursiver Algorithmus

Rundreiseproblem

Quellen