[MIT6.006] 20. Daynamic Programming II: Text Justification, Blackjack 动态规划II:文本对齐,黑杰克
阅读原文时间:2023年07月08日阅读:1

这节课通过讲解动态规划在文本对齐(Text Justification)和黑杰克(Blackjack)上的求解过程,来帮助我们理解动态规划的通用求解的五个步骤:

动态规划求解的五个“简单”步骤:

  • 定义子问题;
  • 猜部分解决方法;
  • 关联子问题的解决方法;
  • 递归&记录 或者 构建自下向上的动态规划表;
  • 解决原问题。

拿上节课的例子(斐波那契数和最短路径)来看,如下图所示:

一、文本对齐

首先,我们先看下文本对齐问题,在使用word排版文字的时候,为了排版美观,我们常会用到文本两端对齐的功能。文本对齐功能就是将文本拆分成合适的行,让行内尽可能塞进足够的词。微软MS OFFICE是用贪心算法做的,而Latex是用动态规划算法去做,效率会更高些。在解决文本对齐问题时,我们要定义它的对齐代价,即如果拆分后的文本近似与行宽,则它们的badness近乎于0,但如果不合适,则无穷。如下图所示:

现在,我们用上面讲的五步求解步骤来分析下:

  1. 子问题:自第i个word后的文本后缀words[i:](子问题数量为n);
  2. 猜:从哪开始第2行(猜的选择小于等于n-i,即不超过后缀words[i:]的长度);
  3. 递归;
  4. 拓扑次序:从后往前去安排words;(补充:对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。)
  5. 原问题:求起始位置的动态规划。

在上面的过程中会用到父指针,用于记住哪个猜的是最好的,这样下一个猜测可以直接基于上一个最好的猜测进行。

二、黑杰克

黑杰克是一个赌场游戏,如果看过《决胜21点》的话,电影里面的21点扑克玩法就是黑杰克。游戏者的目标是使手中的牌的点数之和不超过 21 点且尽量大。在要牌的过程中,如果所有的牌加起来超过21点,玩家就输了——叫爆掉(Burst)。假如他没爆掉,那么你就与他比点数大小,大为赢。拿牌叫HIT,停牌(不再拿牌)叫STAND。玩家叫player,庄家叫dealer。

在黑杰克中的动态规划求解五步为上图所示,这里不做详细解释,因为游戏规则我也不是很懂,后续有空再了解进行补充。