V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
joinmouse
V2EX  ›  程序员

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

  •  
  •   joinmouse · 43 天前 · 2580 次点击
    这是一个创建于 43 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在 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
    17 条回复    2025-07-23 15:51:06 +08:00
    Need4more
        1
    Need4more  
       43 天前   ❤️ 3
    在数学和运筹学中,“Programming”一词的核心含义是**“规划”** (或“计划”)

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

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

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

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

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

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

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

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

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

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

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

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

    但是你这个帖子:

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

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

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

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

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

    但凡数学到一定程度就不会认为 programming 是编程的意思
    joinmouse
        15
    joinmouse  
    OP
       43 天前
    @realpg 嗯嗯,没毛病
    realpg
        16
    realpg  
    PRO
       43 天前
    @joinmouse #15
    中文的分析语优势这里就显现出来了
    看翻译材料学习的中国人 这里就不会犯错了
    CJ2r4u3EH4lrM7aR
        17
    CJ2r4u3EH4lrM7aR  
       43 天前 via Android   ❤️ 1
    靠,鲁棒性用了这么多年我说啥了吗?还惯着他了
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5211 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 09:28 · PVG 17:28 · LAX 02:28 · JFK 05:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.