如果您可以重命名动态编程,您将如何称呼它?
如果您可以重命名动态编程,您将如何称呼它?
Answers:
理查德·贝尔曼(Richard Bellman)的自传表明,他选择“动态编程”一词是故意分散注意力。
1950年代不是数学研究的好年头。我们在华盛顿有一位非常有趣的绅士,名叫威尔逊。他曾任国防部长,实际上对“研究”一词有病态的恐惧和仇恨。我不是在轻率地使用这个词。我正在精确地使用它。如果人们在他的面前使用“研究”一词,他的脸就会闷闷不乐,他会变成红色,并且会变得暴力。您可以想象他对“数学”一词的感受。兰德公司受雇于空军,而空军实质上是由威尔逊担任老板的。因此,我觉得我必须做些事情来保护威尔逊和空军免受我实际上是在兰德公司内部从事数学工作的事实。
我可以选择什么标题,什么名字?首先,我对计划,决策,思考感兴趣。但是出于各种原因,规划并不是一个好词。因此,我决定使用“编程”一词。我想了解一下这是动态的,多阶段的,随时间变化的想法,我想,让我们用一块石头杀死两只鸟。让我们用一个在古典物理意义上具有绝对精确含义的词,即“动态”。它也有一个非常有趣的性质,作为形容词,这在贬义的意义上不可能使用“动态”一词。尝试考虑一些可能赋予其贬义性的组合。不可能。因此,我认为“动态编程”是个好名字。连国会议员都无法反对。
(正如罗素(Russell)和诺维格(Norvig)在其AI教科书中指出的那样,这个故事必须是对真理的创造性修饰。贝尔曼(Bellman)在1952年首次使用了“动态编程”这一短语,而查尔斯·欧文·威尔逊(Charles Erwin Wilson)直到1953年才成为国防部长。 )
无论如何,Bellman的最初动机是建议进行多阶段计划,但至少出于算法目的,我更喜欢节俭的自下而上递归,但音节较少。
DP有两个重要方面:(1)定义子问题(即,建立“表”,该表可以是可能由整数,顶点,顶点子集等索引的多维数组),以及(2)递归求解子问题。我建议将“表格/表格递归”作为一个名称,同时引用这两个方面。
记忆化是一个相当普遍的变体。
在我最近关于算法设计中的动态编程的演讲之后,我请学生们为该技术提出一个新的名字。当我为“艰难的编程”而逗乐时,我想要一些可以使这项技术更令人难忘的东西。在这里进行讨论之后,我可以提出两个名称,一个用于自上而下,一个用于自下而上:
Multiway-Divide和Memoized-Conquer(又名Divide ^ M&Conquer ^ M),并
合并所有子问题(又名Merge_all)。
本文(paywalled doi)将使用DP可攻击的问题称为“可分解的”。
可能包含单词table和fill的东西,因为这就是发生的情况。