为什么说这个世界的本质就是动态规划(Dynamic Programming,DP)?

什么是动态规划

码农界的的DP,通常是刷题时的最难的题型,常见于Leetcode周赛的最后一题。

然而到底什么是DP呢?

是一种算法思想。

核心部分就是要记住之前计算过的最优策略。

aka,查表。

而这其实也是世界运行和人类决策的基本逻辑。

最优路径规划就是最常见的DP问题。

还有最经典的斐波那契数列。

大模型届的KV Cache就是经典的DP思想。

所有的LRU Cache / Redis / CDN,都是一样的思想。

这里可以有无数的计算机科学的例子,然而更重要的,是人类的生活中的启发。

现实中有哪些DP呢?

当你在思考时,你并不是从零开始,而是从最近一次相关的记忆出发。我们的大脑并不擅长即时全局计算,而擅长的是调用已有的、曾经出现过的模式片段。就像动态规划中的“记忆化搜索”(memoization):你遇到一个子问题,先查一下有没有存过解,如果有,就直接复用。

下棋

下棋时,开局时记忆而非计算,而是已经知道怎么下了。

你的当头炮马来条,你的后翼弃兵,你的金角银边草肚皮,都是人类在无数次对弈中总结出来的DP表。

一位职业棋手在开局时,并不需要每步都从头分析。他落子的依据,往往是记忆中无数次练习过的开局套路。这些记忆,可能来源于:

  • 上百盘实战;
  • 书籍中的定式;
  • 师傅讲解过的局面;
  • 模糊的视觉图像。

他的大脑在做的,是快速匹配当前局势与脑海中“记忆库”中的一条路径。

这些步骤往往时人类所有的经验合成的DP表。

高手往往可以背谱背很多步。

思考,往往起源于“查表”

我们每次思考,其实大多是在潜意识里问自己:

我以前有没有遇到过类似的情况?

我听谁说过类似的故事?

有没有一条熟悉的解释可以套用?

这其实就是在调用一个“人类版的DP表”——一个被我们经验、教育、文化所不断写入和更新的巨大缓存系统。

第一性原理

当然了,也有例外。

第一性原理,就是要打破最近的DP表,找到更加稳定的起点。

记忆有限。有时候它会过时、偏差或根本不适用。

这时候,我们需要做的就是找到更原始的逻辑起点。

这就像是,在一个充满缓存的系统中,人为执行一次冷启动:不依赖旧结果,强行重新求解一次。

总会有伟大的人,带领我们找到更原始的逻辑起点。

比如牛顿,比如爱因斯坦。

比如高斯。

比如Hinton教授。

站在巨人的肩膀

所以,这给了我们一个极其深刻的启发:

我们为什么要学习?

不是为了考试,不是为了显得聪明——而是为了抓取别人已经写好的DP表。

学语言的过程

我们小时候并不理解语法规则,但会先模仿、先背诵。 “早上好”、“我爱你”、“你吃饭了吗”——这些语句我们一开始并不理解结构,而是直接调用记忆。就像语言模型预训练阶段,只是暴力堆积token的统计模式。

但随着记忆表的积累到一定程度,突然之间:

语言“涌现”了。你开始能组句,能表达,能跳出例句创造新话语。

这不是灵光乍现,而是DP表足够大、状态覆盖足够广之后,自然出现的结果。

启发

在这个世界上,有人花了一生,走完了一条复杂而艰难的路径,把中间每一步都记录了下来。而我们学习的意义,就是把这些“中间结果”加载进自己大脑的缓存表,省去反复试错的代价。

  • 看书,是提取他人沉淀下来的经验片段;
  • 看传记,是复制一整段人生的“状态转移轨迹”;
  • 看视频、听讲座,是快速吸收别人的观察角度和认知模式;
  • 而上学,则是系统性地加载人类在某一领域集体编写好的DP表。

你越能精准调用这些已有的“记忆表”,就越能在关键时刻快速出解,甚至跳出常规,产生新解。

甚至一生中,只需要调用这些DP表,就可以很好的过完一生。 当然了,你还是想要活出自己精彩的一生。

你不是天才,但你可以背下很多天才的中间步骤。

你不是巨人,但你可以复用巨人的路径。

你不是从0开始,而是从99%的已有答案出发,去寻找那个独属于你的“最后一步”。