什么是动态编程的“动态”?


9

我的一位前辈接受了工作面试,有人问他为什么称之为动态。他无法回答,他放弃了采访者后说,它没有任何动态,只是这样称呼它。我很难相信这一点。

它是否指的是子问题在运行时已解决并用于最终目标的事实?像在运行时发生的动态内存分配一样?

[回答]

在问这个问题之前,我应该读过这个 Wiki文章,对不起。


2
简短的回答,这只是一个名字。不需要字面意义。
Yuval Filmus 2013年

4
可以说,DP(表填充)的典型实现是算法所能达到的静态效果。
拉斐尔

Answers:


1

我一直认为这意味着使用动态编程的算法似乎可以“ 动态 ” 编辑问题空间,直到可以使用贪心算法解决问题为止。

例如,对于Checkerboard问题,动态编程算法将编辑整个棋盘,然后最终使用贪婪算法(类似地,使用Dijkstra的最短路径算法等)。

我不确定这是否可以推广到每个动态编程问题。


9

实际上,“动态编程”这个名称没有什么特别的。该技术本身就是巧妙地消除递归。看到此问题并查看@Jeffe答案,据报道Belman选择该名称是故意分散注意力。


3
尽管从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
John Dvorak

维基百科的某个人似乎不同意,我只是发现了这一点-它是动态的,因为表中的值是由基于表中其他值的算法填充的,它的编程意义在于设置表中的内容,例如电视编程与何时播出节目相关— 维基
百科

@akki:有一些动态编程的例子,其中根本不需要表格...
Massimo Cafaro 2013年

1
O(1)mnO(min(m,n))mn

2
@akki:当我说DP即将精简递归时,这就是我所说的!但是这个名字本身是毫无意义的,而且仍然毫无意义。
Massimo Cafaro 2013年

6

这里有一个有趣的故事。Bellman率先提出了这种范例。但是,这实际上是数学研究。早在他的时代,当时的国防部长对“ 研究数学”Research and Math)一词有偏执(疯狂的家伙,对!)。贝尔曼害怕秘书会为他的工作大怒,并最终使他陷入困境。因此,为了模糊起见,他将其称为动态编程,但是它没有任何“动态”。


1
来源吗?似乎是一个非常有趣的故事。
jmite 2013年

顺便提一句:不清楚是谁第一次设计了动态编程。Bellman因证明任何动态编程实现均在最佳状态下服从所谓的Bellman-Ford方程式而受到赞誉。不幸的是,似乎很多人容易相信,这使Bellman成为了最初想法的主要研究者。
卡洛斯·利纳雷斯·洛佩斯

@jmite我在某个地方(可能是一些博客)读了此文章。.我将尝试提供源代码……
Subhayan 2013年

@jmite您可以在Jeff的讲座5:动态编程以及Wiki:动态编程中找到该故事。
恒新

3

理查德·贝尔曼(Richard Bellman)用贝尔曼(Bellman)的话称其为动态编程 在此处输入图片说明

我在RAND(1950年秋季)度过。我的首要任务是为多阶段决策流程找到一个名称。

一个有趣的问题是,动态编程的名称从何而来?1950年代不是数学研究的好年头。我们在华盛顿有一位非常有趣的绅士,名叫威尔逊。他曾任国防部长,实际上对病理学一词有病态的恐惧和仇恨。我不是在轻率地使用这个词。我正在精确地使用它。如果人们在他的面前使用“研究”一词,他的脸就会闷闷不乐,他会变成红色,并且会变得暴力。您可以想象他对数学这个术语的看法。兰德公司受雇于空军,而空军实质上是由威尔逊担任老板的。因此,我觉得我必须做些事情来保护威尔逊和空军免受事实的困扰,因为我实际上是在RAND公司内部从事数学工作。什么标题,什么名字,我可以选择吗?首先,我对计划,决策,思考感兴趣。但是出于各种原因,规划并不是一个好词。因此,我决定使用“编程”一词。我想了解一下这是动态的,多阶段的,随时间变化的。我想,让我们用一块石头杀死两只鸟。让我们以古典物理意义上具有绝对精确意义的单词(即动态的)为例。作为形容词,它也具有非常有趣的属性,并且不可能在贬义的意义上使用“动态”一词。尝试考虑一些可能赋予其贬义性的组合。不可能。因此,我认为动态编程是一个好名字。连国会议员都无法反对。

资料来源:飓风之眼,理查德·贝尔曼(自传)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.