 ##  [Dynamische Programmierung](/de/node/58865) 

 Definition

Ein Verfahren zur Lösung komplexer Probleme durch Zerlegung in sich überschneidende Teilprobleme und das Speichern ihrer Lösungen (mittels Memoisierung oder Tabellierung), sodass jedes Teilproblem nur einmal gelöst wird und redundante Berechnung vermieden wird; anwendbar, wenn das Problem optimale Teilstruktur und überschneidende Teilprobleme aufweist.

 

 

 

 

 

 





## Prinzip

Prinzip

Anwendung des Optimalitätsprinzips: Eine optimale Lösung eines Problems enthält optimale Lösungen seiner Teilprobleme; den Rechneraufwand um Zustandsrepräsentation, Rekurrenzrelation und Wiederverwendung berechneter Teilergebnisse organisieren.

 

 

 

 

 





## Demonstration

Demonstration

Berechnung der n-ten Fibonacci-Zahl durch Speicherung früherer Fibonacci-Werte (Memoisierung oder Bottom-up-Tabelle): statt exponentieller Rekursion berechnet man F(0), F(1), …, F(n) jeweils einmal und verwendet sie wieder. Bei Optimierung wird das 0/1-Rucksackproblem durch Auffüllen einer Tabelle der besten Werte für Kapazität und Prefix von Gegenständen gelöst, um dieselben Kombinationen nicht mehrfach zu prüfen.

 

 

 

 

## Fehlanwendung

Fehlanwendung

Einsatz von dynamischer Programmierung bei Problemen ohne optimale Teilstruktur (z. B. wenn lokale optimale Entscheidungen nicht zu globalen Optima führen) oder bei Problemen mit extrem großem Zustandsraum ohne Kompression, was zu falschen Ergebnissen oder unvertretbarem Speicherbedarf führt.

 

 

 

 

 





## Konsequenz

Konsequenz

Wenn anwendbar, können naive exponentielle Suchverfahren häufig zu Algorithmen mit polynomieller Laufzeit reduziert werden; Zeit wird gegen Speicher getauscht (Memo-Tabellen), und Lösungen sind innerhalb der gewählten Repräsentation reproduzierbar und exakt.

 

 

 

 

## Umkehrung

Umkehrung

Gierige Verfahren oder klassische Divide-and-Conquer-Methoden, die Teilproblemlösungen nicht wiederverwenden und lokal optimale Entscheidungen treffen, ohne globale Optimalität sicherzustellen; sie sind manchmal schneller, können aber falsch sein, wenn globale Koordination nötig ist.

 

 

 

 

 





## Abgrenzung

Abgrenzung

Gilt für diskrete Probleme mit wohldefinierten Zuständen und Rekurrenzen; schließt Probleme ohne optimale Teilstruktur oder solche ein, deren Zustände nicht kompakt darstellbar sind (z. B. bestimmte nicht-markovschen oder hochdimensionalen kontinuierlichen Probleme) sowie Fälle, in denen der Speicher-/Zeithandel untragbar ist.

 

 

 

 

 





## Semantische Spannung

Semantische Spannung

Spannung zwischen Memoisierung (top-down Caching) und Tabellierung (bottom-up Iteration) sowie zwischen dynamischer Programmierung und herkömmlichem Divide-and-Conquer: Beide zerlegen Aufgaben, unterscheiden sich jedoch in Wiederverwendungsstrategie und Reihenfolge.

 

 

 

 

 





## Synthese

Synthese

Dynamische Programmierung wandelt eine Rekurrenz oder Zustandszerlegung systematisch in eine Berechnung um, die gelöste Teilprobleme wiederverwendet und damit Speicher gegen Zeit tauscht; praktisch erfordert dies das Entwerfen von Zuständen, Übergängen und Speichergrenzen.