这节课通过讲解动态规划在文本对齐(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,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。)
  5. 原问题:求起始位置的动态规划。

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

二、黑杰克

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

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

[MIT6.006] 20. Daynamic Programming II: Text Justification, Blackjack 动态规划II:文本对齐,黑杰克的更多相关文章

  1. [MIT6.006] 19. Daynamic Programming I: Fibonacci, Shortest Path 动态规划I:斐波那契,最短路径

    这节课讲动态规划的内容,动态规划是一种通用且有效的算法设计思路,它的主要成分是"子问题"+"重用".它可以用于斐波那契和最短路径等问题的求解上. 一.斐波那契 ...

  2. [MIT6.006] 22. Daynamic Programming IV: Guitar Fingering, Tetris, Super Mario Bro. 动态规划IV:吉他指弹,俄罗斯方块,超级玛丽奥

    之前我们讲到动态规划五步中有个Guessing猜,一般情况下猜有两种情况: 在猜和递归上:猜的是用于解决更大问题的子问题: 在子问题定义上:如果要猜更多,就要增加更多子问题. 下面我们来看如果像背包问 ...

  3. [MIT6.006] 21. Daynamic Programming III: Parenthesization, Edit Distance, Knapsack 动态规划III:括号问题,编辑距离,背包问题

    这节课主要针对字符串/序列上的问题,了解如果使用动态规划进行求解.上节课我们也讲过使用前缀和后缀的概念,他们如下所示: 接下来,我们通过三个问题来深入了解下动态规划使用前缀.后缀和子串怎么去解决括号问 ...

  4. Unique Binary Search Trees I&&II(II思路很棒)——动态规划(II没理解)

      Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For exa ...

  5. [LeetCode] Text Justification 文本左右对齐

    Given an array of words and a length L, format the text such that each line has exactly L characters ...

  6. [Swift]LeetCode68. 文本左右对齐 | Text Justification

    Given an array of words and a width maxWidth, format the text such that each line has exactly maxWid ...

  7. [leetcode]68. Text Justification文字对齐

    Given an array of words and a width maxWidth, format the text such that each line has exactly maxWid ...

  8. 68. Text Justification一行单词 两端对齐

    [抄题]: Given an array of words and a width maxWidth, format the text such that each line has exactly  ...

  9. 68. Text Justification (JAVA)

    Given an array of words and a width maxWidth, format the text such that each line has exactly maxWid ...

随机推荐

  1. object-fit 详解

    contain 被替换的内容将被缩放,以在填充元素的内容框时保持其宽高比. 整个对象在填充盒子的同时保留其长宽比,因此如果宽高比与框的宽高比不匹配,该对象将被添加"黑边". cov ...

  2. Python+Appium自动化测试(1)-appium环境搭建

    用python+appium做appUI自动化测试,系统为Windows.首先是JDK与Android SDK的安装与环境变量的设置. 一,安装JDK,配置JDK环境变量 1,下载jdk jdk8官网 ...

  3. shell携带附件,Linux下的自解压文件诞生了

    初衷 windows下有自解压文件,直接双击就能释放文件,并且还能执行释放文件前后要执行的脚本.Linux下我也想要这样的功能,因为我希望直接拷贝一个shell脚本给别人,别人直接运行就能用,而不是一 ...

  4. NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)

    错误信息: NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK) 错误背景:微服务不通过统一的nginx端口访问,能够正常请求接口并获取对应的响应.但是通过ngi ...

  5. python中jsonpath模块运用

    原文链接:https://www.cnblogs.com/denise1108/p/10265911.html 1. jsonpath介绍用来解析多层嵌套的json数据;JsonPath 是一种信息抽 ...

  6. TimeSpan时间间隔详解

    1 public string GetShiXian(string fadanshijian) 2 { 3 string result,chulishijian; 4 5 DateTime fdTim ...

  7. 【荐】JavaScript图片放大技术(放大镜)示例代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. python 微信小程序自动化

    微信小程序自动化 https://www.cnblogs.com/yyoba/python27 - FautoTesthttps://www.cnblogs.com/yyoba/p/9973731.h ...

  9. Linux用户和组的配置文件

    用户和组的主要配置文件 前两个是放用户账号相关的,后两个是放和组相关的 /etc/passwd:用户及其属性信息(名称.UID.主组ID等) #早期密码也放这里,后来发现不安全,谁都能看 /etc/s ...

  10. kettle学习笔记(三)— 定时任务的脚本执行

    kettle-定时任务 Kettle 的定时任务可以用kettle中的job工作来定时转换(缺点窗口不可关闭),同时也可以使用bat脚本来启动kettle的 '.ktr'转换. 注:这里对定时任务的时 ...