dynamic programming (动态规划) 给老外带来的误导

59 天前
 joinmouse
最近在 hackernew 上看到一个帖子很有意思

"dynamic programming"在一个初学计算机相关的老外世界中,可能直观的得到的信息是"动态的编程",这个帖子下一个国际信息学奥林匹克竞赛( IOI )的金牌选手也描述自己花了一年时间才想明白这里的"dynamic programming"到底是什么,以及经常被人"dynamic programming"是不是动态内存分配( I was often asked "did you mean dynamic memory allocation?"),可见一个概念命名如果和一些常见的名词有混淆的时候,会给人带来多少不必要的误导,"dynamic programming"中翻译成动态规划到显得非常机智了。




下面有一篇文章专门介绍这个词的来历,也非常有意思,有兴趣的可以看一下。

https://www.vidarholen.net/contents/blog/?cat=23
2622 次点击
所在节点    程序员
17 条回复
Need4more
59 天前
在数学和运筹学中,“Programming”一词的核心含义是**“规划”** (或“计划”)

Linear Programming → 线性规划(而非“线性编程”);
Integer Programming → 整数规划;
Nonlinear Programming → 非线性规划。

DP 的发明者是美国数学家理查德·贝尔曼( Richard Bellman ) ,他在 1950 年代为解决多阶段决策过程 的优化问题提出了这一方法。

翻译到中文这边,都遵循“Programming = 规划”的逻辑,因为它们本质是优化方法,而非计算机编程。

话说研究算法的本来就是搞数学的那批人吧,现代人学习算法可能跳过了数学知识。
TWorldIsNButThis
59 天前
说个题外话

计算机作为新学科,其实是没多少术语的,都是从日常用语里找个词就用了,除了少数几个借词 比如 polymorphism 和函数式编程从范畴论里搬了一堆的概念,不像医学之类的老学科有一整套词根造词
stack 就是一叠
heap 就是一堆
string 就是一串
thread 就是织布机上纺织用的线(所以理解为什么
1 、java 做 virtual thread 的项目叫 project loom
2 、有栈协程又被称为 fiber 纤维
了吧)
handler 就是把手
memory 就是记忆
所以对于母语是英语的人看编程里的这些词和母语是中文的人看什么栈堆字符串线程句柄内存完全是两个画风
w568w
59 天前
我一直觉得 Dynamic Programming 这名字起得很诡谲。

先不说 Programming 单词的误导,Dynamic 也很意义不明:为什么就管这个算法叫「动态」?难道其他算法(比如搜索)不是动态的?

我觉得还是叫「记忆化搜索」( Memorized Search )比较好。既避免发明新词,又能触及 DP 的本质。
kneo
59 天前
这是个算法。

你要是真学习过,就不存在被名字误导。
你要是没学习过,不误导你也不会。

只有在做选择题的时候,瞎蒙发现蒙错了,才会:哦,被”误导“了。
或者在和别人聊天的时候,不懂硬聊,发现这个逼不是自己能装的。

你帖子里的这位竞赛选手花了一年,是在”掌握“这个算法,不是因为理解不了这个名字。至于他说”内存分配“,只是对”外行“的揶揄。就像你亲戚以为你是修电脑的。
joinmouse
59 天前
@kneo 帖子的主题是 “Dynamic programming” is not referring to “computer programming”
joinmouse
59 天前
@w568w
这个文章中有详细的介绍,美国数学家理查德·贝尔曼( Richard Bellman )为什么起名叫这个,有一部分当时政治因素,可以直接看最后的一段

https://www.vidarholen.net/contents/blog/?cat=23
mayli
59 天前
@w568w 数学上 programming 同义词是 optimization ,中文叫最优化,或者优化,或者规划,计算机早期都是数学借过来的一些学科。
数学名词都太抽象了。
joinmouse
59 天前
@Need4more 是的,学这些相关算法的人可能还是以学编码的为多,可能也有一种知见障。帖子的主题就是: “Dynamic programming” is not referring to “computer programming”,可见这个“programming”在很多编程者眼中是很容易理解成计算机的编程
joinmouse
59 天前
@TWorldIsNButThis 哈哈哈,其实我也认为很多专有名词中文翻译的很牵强,会让人很困惑。不过名词只是一个概念,有时候适当的忽视这种概念去理解可能会更好
w568w
59 天前
@joinmouse #6 这个小插曲我确实有所耳闻的。所以 DP 其实是用来糊弄不懂编程领导的大词,背后并没有深思熟虑的词义,流传下来就挺没品的。就像 robust 翻译成鲁棒一样,都是一拍脑门的结果
kneo
59 天前
@joinmouse > 帖子的主题是 “Dynamic programming” is not referring to “computer programming”

HN 上那个主题,没毛病。
HN 上的 comment ,也没毛病。

但是你这个帖子:

> 国际信息学奥林匹克竞赛( IOI )的金牌选手也描述自己花了一年时间才想明白这里的"dynamic programming"到底是什么

我认为是相当强烈的误导。结合你的标题“给老外带来的误导”和这句话之后的“会给人带来多少不必要的误导”,好像让人以为这位选手因为把“动态规划”当成了“动态的编程”浪费了一年的时间。

你肯定会说这不是你的本意。我也只说这是一个误导。
kneo
59 天前
@kneo 我又看了下后面,这个人花了一年时间原来是因为那个年代没有教材,所以他真的不知道 dynamic programming 是什么意思……只能说这东西不学是真不会。
geelaw
58 天前
@w568w #3 为了应付管钱的人起的,dynamic 充满了正面与积极的色彩。

另外那个东西的英文叫做 memOIzed search 不是 memORIzed search ,字面翻译叫做“备忘化搜索”,memoize 是 memo(randum/-a) 备忘录 + 化。当然,记忆化和备忘化意思差不多就是了。
realpg
58 天前
研究高阶算法的本来就是学数学的主场

现在的行业内有大量计算机的在搞

但凡数学到一定程度就不会认为 programming 是编程的意思
joinmouse
58 天前
@realpg 嗯嗯,没毛病
realpg
58 天前
@joinmouse #15
中文的分析语优势这里就显现出来了
看翻译材料学习的中国人 这里就不会犯错了
CJ2r4u3EH4lrM7aR
58 天前
靠,鲁棒性用了这么多年我说啥了吗?还惯着他了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1146985

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX