[MIT6.006] 20. Daynamic Programming II: Text Justification, Blackjack 动态规划II:文本对齐,黑杰克
这节课通过讲解动态规划在文本对齐(Text Justification)和黑杰克(Blackjack)上的求解过程,来帮助我们理解动态规划的通用求解的五个步骤:
动态规划求解的五个“简单”步骤:
- 定义子问题;
- 猜部分解决方法;
- 关联子问题的解决方法;
- 递归&记录 或者 构建自下向上的动态规划表;
- 解决原问题。
拿上节课的例子(斐波那契数和最短路径)来看,如下图所示:
一、文本对齐
首先,我们先看下文本对齐问题,在使用word排版文字的时候,为了排版美观,我们常会用到文本两端对齐的功能。文本对齐功能就是将文本拆分成合适的行,让行内尽可能塞进足够的词。微软MS OFFICE是用贪心算法做的,而Latex是用动态规划算法去做,效率会更高些。在解决文本对齐问题时,我们要定义它的对齐代价,即如果拆分后的文本近似与行宽,则它们的badness近乎于0,但如果不合适,则无穷。如下图所示:
现在,我们用上面讲的五步求解步骤来分析下:
- 子问题:自第i个word后的文本后缀words[i:](子问题数量为n);
- 猜:从哪开始第2行(猜的选择小于等于n-i,即不超过后缀words[i:]的长度);
- 递归;
- 拓扑次序:从后往前去安排words;(补充:对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。)
- 原问题:求起始位置的动态规划。
在上面的过程中会用到父指针,用于记住哪个猜的是最好的,这样下一个猜测可以直接基于上一个最好的猜测进行。
二、黑杰克
黑杰克是一个赌场游戏,如果看过《决胜21点》的话,电影里面的21点扑克玩法就是黑杰克。游戏者的目标是使手中的牌的点数之和不超过 21 点且尽量大。在要牌的过程中,如果所有的牌加起来超过21点,玩家就输了——叫爆掉(Burst)。假如他没爆掉,那么你就与他比点数大小,大为赢。拿牌叫HIT,停牌(不再拿牌)叫STAND。玩家叫player,庄家叫dealer。
在黑杰克中的动态规划求解五步为上图所示,这里不做详细解释,因为游戏规则我也不是很懂,后续有空再了解进行补充。
[MIT6.006] 20. Daynamic Programming II: Text Justification, Blackjack 动态规划II:文本对齐,黑杰克的更多相关文章
- [MIT6.006] 19. Daynamic Programming I: Fibonacci, Shortest Path 动态规划I:斐波那契,最短路径
这节课讲动态规划的内容,动态规划是一种通用且有效的算法设计思路,它的主要成分是"子问题"+"重用".它可以用于斐波那契和最短路径等问题的求解上. 一.斐波那契 ...
- [MIT6.006] 22. Daynamic Programming IV: Guitar Fingering, Tetris, Super Mario Bro. 动态规划IV:吉他指弹,俄罗斯方块,超级玛丽奥
之前我们讲到动态规划五步中有个Guessing猜,一般情况下猜有两种情况: 在猜和递归上:猜的是用于解决更大问题的子问题: 在子问题定义上:如果要猜更多,就要增加更多子问题. 下面我们来看如果像背包问 ...
- [MIT6.006] 21. Daynamic Programming III: Parenthesization, Edit Distance, Knapsack 动态规划III:括号问题,编辑距离,背包问题
这节课主要针对字符串/序列上的问题,了解如果使用动态规划进行求解.上节课我们也讲过使用前缀和后缀的概念,他们如下所示: 接下来,我们通过三个问题来深入了解下动态规划使用前缀.后缀和子串怎么去解决括号问 ...
- 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 ...
- [LeetCode] Text Justification 文本左右对齐
Given an array of words and a length L, format the text such that each line has exactly L characters ...
- [Swift]LeetCode68. 文本左右对齐 | Text Justification
Given an array of words and a width maxWidth, format the text such that each line has exactly maxWid ...
- [leetcode]68. Text Justification文字对齐
Given an array of words and a width maxWidth, format the text such that each line has exactly maxWid ...
- 68. Text Justification一行单词 两端对齐
[抄题]: Given an array of words and a width maxWidth, format the text such that each line has exactly ...
- 68. Text Justification (JAVA)
Given an array of words and a width maxWidth, format the text such that each line has exactly maxWid ...
随机推荐
- lua 1.0 源码分析 -- 1 lua 的虚拟指令
lua的解释器拿到 lua 编写的源码,首先进行解析,就是进行词法分析和语法分析,将源码转换成 lua 的指令集,然后执行这个指令集. lua 源码: function f(val) return v ...
- mysql DISTINCT选取多个字段,获取distinct后的行信息
背景: a表保存关联关系,通过ACode 获取该关系中的所有 BCode, 并获取所有Bcode-max(Bvrsn)的信息 Bnm 表a 表b 循序渐进: ...
- Mac快捷键整理(随时更新)
一.文字编辑 快捷键 含义 解释 control + A 到行首 A没找到对应单词,暂时认为A是字母表的开始 control + E 到行尾 E是end的缩写
- Shell Scripting 笔记
Shell Scripting Tutorial Variables in the Bourne shell do not have to be declared, as they do in lan ...
- firstBlog
第一篇博客 markdown语法的学习 基本语法 标题与段落 在文字前面加1-6个#号来表示来代表一级标题到六级标题 一级标题 五级标题 列表 对于无序列表,可以使用字符-,+和*作为列表的标记 - ...
- Martyr2项目实现——Number部分的问题求解 (1) Find Pi to Nth Digit
Martyr2项目实现--Number部分的问题求解 (1) Find Pi to Nth Digit Find Pi to Nth Digit 问题描述: Find PI to the Nth Di ...
- 第十三章 nginx代理服务
一.数据库迁移 1.常见原因 1.数据库要做升级2.数据库服务器到期需要迁移 2.新服务器搭建数据库 [root@db02 ~]# yum install -y mariadb-server 3.启动 ...
- Helium文档8-WebUI自动化-wait_until等待元素出现
前言 wait_until等待某个条件为真才继续往下执行.默认的超时时间为10s,每0.5查询一次,这俩参数选填.可以设置超时时间和轮询间隔. 可以作为添加后校验元素是否存在的场景 入参介绍 def ...
- 学了那么多 NoSQL 数据库 NoSQL 究竟是啥
NoSQL 简史 NoSQL 一词最早出现于 1998 年,是 Carlo Strozzi 开发的一个轻量.开源.不提供 SQL 功能的关系数据库. 2009 年,Last.fm 的 Johan Os ...
- vue学习笔记(一)---- vue指令( v-bind 属性绑定 )
看栗子: <body> <div id="app"> <input type="button" value="按钮&qu ...