Gibt es einen Unterschied zwischen dynamischer Programmierung von oben nach unten und von unten nach oben?

33

Gibt es einen grundlegenden Unterschied zwischen dynamischer Programmierung von oben nach unten und von unten nach oben?

Gibt es insbesondere ein Problem, das von unten nach oben und nicht von oben nach unten gelöst werden kann? Oder ist der Bottom-Up-Ansatz nur eine Abwicklung der Wiederholung im Top-Down-Ansatz?

user695652
quelle

Antworten:

27

Um die Bottom-up-Methode verwenden zu können, müssen Sie in der Lage sein, den "Bottom" effizient zu bestimmen. Dies bedeutet normalerweise, dass Sie einen stark eingeschränkten Problembereich benötigen. Wenn Sie wissen, wie die Berechnungen auf der niedrigsten Ebene aussehen und wie die Abhängigkeitsreihenfolge nach oben geht, ist es sinnvoll, sie iterativ in der richtigen Reihenfolge auszuführen und diese Ergebnisse zu speichern. Factorials, naive Fibonacci und die Euler-Wiederholungsrelation für Partitionen sind gute Beispiele für Probleme, die für diesen Ansatz geeignet sind.

Einige Probleme haben keine leicht zu bestimmende Grund- oder Abhängigkeitsreihenfolge für die Berechnungen. Zum Beispiel werden die Bewertungen von Schachpositionen sinnvollerweise nach Positionen gespeichert, wobei die Bewertungspunkte gespeichert werden, so dass sie nicht neu berechnet werden müssen. Durch die Verschiebung und Wiederholung können Positionen auf mehreren Ebenen des Suchbaums wiederholt werden, sodass sich das Speichern der Bewertungsergebnisse lohnt. Es ist jedoch nicht möglich, die Positionen auf den untersten Ebenen des Baums zu bestimmen, ohne rekursiv abzusteigen (und unter Berücksichtigung der Zwischenbeschneidung). Top-down ist also der einzig mögliche Ansatz.

Kyle Jones
quelle
4
  • Top-down-Ansatz: Dies ist das direkte Ergebnis der rekursiven Formulierung eines Problems. Wenn die Lösung für ein Problem unter Verwendung der Lösung für seine Unterprobleme rekursiv formuliert werden kann und wenn sich seine Unterprobleme überschneiden, können die Lösungen für die Unterprobleme leicht in einer Tabelle gespeichert oder gespeichert werden. Wann immer wir versuchen, ein neues Unterproblem zu lösen, überprüfen wir zuerst die Tabelle, um festzustellen, ob es bereits gelöst ist. Wenn eine Lösung aufgezeichnet wurde, können wir sie direkt verwenden, andernfalls lösen wir das Unterproblem und fügen die Lösung der Tabelle hinzu.

  • Bottom-up-Ansatz: Sobald wir die Lösung eines Problems rekursiv in Bezug auf seine Unterprobleme formuliert haben, können wir versuchen, das Problem von unten nach oben umzuformulieren. auf und kommen zu Lösungen für größere Unterprobleme. Dies geschieht in der Regel auch in Tabellenform, indem iterativ Lösungen für immer größere Unterprobleme generiert werden, indem die Lösungen für kleine Unterprobleme verwendet werden. Wenn wir beispielsweise die Werte von F41 und F40 bereits kennen, können wir den Wert von F42 direkt berechnen.

M. Shahzad
quelle