Wenn Sie dynamische Programmierung umbenennen könnten, wie würden Sie es nennen?
Wenn Sie dynamische Programmierung umbenennen könnten, wie würden Sie es nennen?
Antworten:
Richard Bellmans Autobiographie legt nahe, dass er den Begriff „dynamische Programmierung“ absichtlich als ablenkend bezeichnet.
Die 1950er Jahre waren keine guten Jahre für die mathematische Forschung. Wir hatten in Washington einen sehr interessanten Herrn namens Wilson. Er war Verteidigungsminister und hatte tatsächlich eine pathologische Angst und einen Hass gegen das Wort "Forschung". Ich benutze den Begriff nicht leichtfertig. Ich benutze es genau. Sein Gesicht würde durchdringen, er würde rot und er würde gewalttätig werden, wenn die Leute in seiner Gegenwart den Begriff "Forschung" verwenden würden. Sie können sich vorstellen, wie er sich über den Begriff "mathematisch" fühlte. Die RAND Corporation war bei der Air Force angestellt, und die Air Force hatte im Wesentlichen Wilson als Chef. Daher hatte ich das Gefühl, dass ich etwas tun musste, um Wilson und die Luftwaffe vor der Tatsache zu schützen, dass ich wirklich Mathematik innerhalb der RAND Corporation praktizierte.
Welchen Titel, welchen Namen könnte ich wählen? In erster Linie war ich daran interessiert, zu planen, Entscheidungen zu treffen, nachzudenken. Aber Planung ist aus verschiedenen Gründen kein gutes Wort. Ich habe mich daher für das Wort "Programmierung" entschieden. Ich wollte die Vorstellung vermitteln, dass dies dynamisch, mehrstufig und zeitlich variabel ist - ich dachte, wir schlagen zwei Fliegen mit einer Klappe. Nehmen wir ein Wort, das eine absolut präzise Bedeutung hat, nämlich "dynamisch" im klassischen physikalischen Sinne. Es hat auch eine sehr interessante Eigenschaft als Adjektiv, und das ist es unmöglich, das Wort "dynamisch" im abwertenden Sinne zu verwenden. Denken Sie an eine Kombination, die möglicherweise eine abwertende Bedeutung hat. Es ist unmöglich. Daher fand ich, dass „dynamisches Programmieren“ ein guter Name ist. Das konnte nicht einmal ein Kongressabgeordneter beanstanden.
(Wie Russell und Norvig in ihrem AI-Lehrbuch hervorheben, muss diese Geschichte jedoch eine kreative Verschönerung der Wahrheit sein. Bellman verwendete den Begriff "dynamische Programmierung" erstmals 1952 , und Charles Erwin Wilson wurde erst 1953 Verteidigungsminister. )
Wie auch immer, Bellmans ursprüngliche Motivation deutet auf eine mehrstufige Planung hin , aber zumindest für algorithmische Zwecke würde ich eine sparsame Bottom-Up-Rekursion bevorzugen , nur mit weniger Silben.
Es gibt zwei wichtige Aspekte von DP: (1) Definieren der Unterprobleme (dh Erstellen einer "Tabelle", die ein mehrdimensionales Array sein kann, das möglicherweise durch Ganzzahlen, Scheitelpunkte, Untergruppen von Scheitelpunkten usw. indiziert ist) und (2) rekursives Lösen der Unterprobleme. Ich schlage "tabellarische / tabellarische Rekursion" als einen Namen vor, der sich auf beide Aspekte bezieht.
Memoization ist eine ziemlich häufige Variante.
Zum Teilen und Erobern würde ich Spleißen und Kombinieren sagen .
Ich benutze normalerweise beide Wörter, spleiße und kombiniere, während ich DP unterrichte / erkläre; wird aber nicht explizit verwendet. Manchmal habe ich überlappendes Teilen und Erobern verwendet, um die beiden Paradigmen gegenüberzustellen.
Nach meinem letzten Vortrag über dynamisches Programmieren im Algorithmus-Design hatte ich die Schüler gebeten, einen neuen Namen für diese Technik vorzuschlagen. Während ich von "Tough Programming" amüsiert war, wollte ich etwas, das die Technik unvergesslicher macht. Nach der Diskussion hier kann ich zwei Namen vorschlagen, einen für Top-Down und einen für Bottom-Up:
Multiway-Divide und Memoized-Conquer (auch bekannt als Divide ^ M & Conquer ^ M) und
alle Unterprobleme zusammenführen (auch bekannt als Merge_all).
Dieses Papier ( paywalled doi ) nennt Probleme , die mit DP angegriffen werden können, "zerlegbar".
Ich habe dies kürzlich mit einigen Kollegen besprochen, und nach einer hitzigen Diskussion kamen wir auf tabellarisches Caching von Anrufen .
Ich würde den Namen Inductive Programming vorschlagen - als eine Art Brückenschlag aus unserer Zeit bis zu den guten alten Zeiten von Euler, Kepler et al. Oder vielleicht sogar Reverse Inductive Programming . Und ja, für mich ist DP stark mit der Induktion verbunden, im alten guten Sinne des Begriffs. Memoisierung, Zwischenspeichern, Tabellen usw. sind nur Elemente der Technik und nicht der Kern des Ansatzes, Dinge zu knacken.
Wahrscheinlich etwas, das die Wörter table und fill enthält , da dies passiert.
Rekursive Ansicht oder rekursiver Horizont