这节课主要针对字符串/序列上的问题,了解如果使用动态规划进行求解。上节课我们也讲过使用前缀和后缀的概念,他们如下所示:

接下来,我们通过三个问题来深入了解下动态规划使用前缀、后缀和子串怎么去解决括号问题,编辑距离,背包问题

一、括号问题 Parenthesization

在进行一些列矩阵乘法时,我们如果设计括号,可以使计算更加高效?

解决过程如下图所示:

  1. 子问题:求矩阵们A的最优相乘方式;
  2. 猜:上一次矩阵相乘应在哪?
  3. 递归:最小化矩阵相乘的损失;
  4. 拓扑排序:增加子串的大小;
  5. 原问题:DP(0, n);

二、编辑距离 Edit Dsitance

给定两个字串x和y,让x变成y的最廉价的字符编辑操作是怎样的?编辑距离问题在很多地方有应用,例如:拼写纠正,DNA编辑和找到最长公共子序列。

它的动态规划解题步骤如下:

  1. 子问题:在x[i:]和y[j:]后缀上做距离编辑了;
  2. 猜:是使用替换,插入还是删除操作;
  3. 递归:选择能最小化编辑损失的操作;
  4. 拓扑排序:相当于在DAG中找最短路径;
  5. 原问题:DP(0, 0)。

三、背包问题 Knapsack

假设你有n个物品,单个物品占用空间是si,价值是vi,请问如何往空间为S的塞进哪些物品能使它们价值最大?该问题动态规划解题步骤如下:

  1. 子问题:第i个物体的前缀和剩余空间X;
  2. 猜:是否将第i个物体放入背包;
  3. 递归:选择能最大化价值且不超过背包容量的操作;

注:这个伪polynomial时间我也不太了解(好像是说该动态规划的时间介于polynomial时间和指数时间之间),后续有待补充。

[MIT6.006] 21. Daynamic Programming III: Parenthesization, Edit Distance, Knapsack 动态规划III:括号问题,编辑距离,背包问题的更多相关文章

  1. [MIT6.006] 20. Daynamic Programming II: Text Justification, Blackjack 动态规划II:文本对齐,黑杰克

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

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

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

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

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

  4. [Locked] One Edit Distance

    One Edit Distance Given two strings S and T, determine if they are both one edit distance apart. 分析: ...

  5. 利用编辑距离(Edit Distance)计算两个字符串的相似度

    利用编辑距离(Edit Distance)计算两个字符串的相似度 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可 ...

  6. [MIT6.006] 1. Algorithmic Thinking, Peak Finding 算法思维,峰值寻找

    [MIT6.006] 系列笔记将记录我观看<MIT6.006 Introduction to Algorithms, Fall 2011>的课程内容和一些自己补充扩展的知识点.该课程主要介 ...

  7. Minimum edit distance(levenshtein distance)(最小编辑距离)初探

    最小编辑距离的定义:编辑距离(Edit Distance),又称Levenshtein距离.是指两个字串之间,由一个转成还有一个所需的最少编辑操作次数.许可的编辑操作包含将一个字符替换成还有一个字符. ...

  8. [LeetCode] Edit Distance 编辑距离

    Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...

  9. LintCode Edit Distance

    LintCode Edit Distance Given two words word1 and word2, find the minimum number of steps required to ...

随机推荐

  1. 前端传递的json格式与SpringMVC接收实体类的对应关系

    这篇文章主要是帮助刚刚入行的猿猿尽快适应Restful风格的搬砖生活 @RequestBody注解 基本介绍:@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数 ...

  2. Linux桌面环境配置

    目录 更换软件源 中文输入法 firefox安装flash插件 编译安装Vim 关闭蓝牙开机自启 yakuake无法正常使用 在中文环境下将默认目录修改成英文 电脑换成了thinkpad x1c 20 ...

  3. tomcat 验证码显示问题

    在Web开发中使用验证码时可能遇到的问题:java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsE ...

  4. spring boot:用swagger3生成接口文档,支持全局通用参数(swagger 3.0.0 / spring boot 2.3.2)

    一,什么是swagger? 1,  Swagger 是一个规范和完整的文档框架, 用于生成.描述.调用和可视化 RESTful 风格的 Web 服务文档 官方网站: https://swagger.i ...

  5. linux(centos8):centos8.1安装(详细过程/图解)(vmware fusion/CentOS-8.1.1911-x86_64)

    一,centos是什么? CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一, 它是来自于Red Hat En ...

  6. PHP转Go系列:数组与切片 转

    数组的定义# 用过PHP的同学应该很清楚,无论多么复杂的数据格式都可以用数组来表达,什么类型的数据都可以往里塞,它是工作必备的一部分,使用很简单,易用程度简直变态. Copy $array = [1, ...

  7. 查询MS sql server里的所有表 SQL中所有列,说明,类型 查询总存储过程数

    1.查询SQL中的所有表: Select TABLE_NAME FROM   "你的数据库名称".INFORMATION_SCHEMA.TABLES Where TABLE_TYP ...

  8. if else 太多?看我用 Java 8 轻松干掉!

    之前我用 Java 8 写了一段逻辑,就是类似下面这样的例子: /* * 来源公众号:Java技术栈 */ if(xxxOrder != null){ if(xxxOrder.getXxxShippi ...

  9. centos7安装ifconfig

    1,找出哪个包提供了ifconfig命令 yum provides ifconfig 2,通过输出,发现是net-tools提供了ifconfig命令 yum install net-tools

  10. Stream(三)

    public class Test08 { /* * 二.中间的加工操作 * (1)filter(Predicate p):过滤 * (2)distinct():去重 * (3)limit(long  ...