【算法导论】Fast-Review简记(四)动态规划

【算法导论】Fast-Review简记(四)动态规划

写在前面

该博文是根据《算法导论(第二版)》机械工程出版社 的主要内容(部分章节未涉及),哈工大老师授课ppt写就的,非常不全面,仅用于快速入门或复习算法。

动态规划简介

  • 动态规划是解决优化问题(给定一个代价函数,在问题的解空间中搜索具有最小或最大代价的优化解)的一种常见方法
  • 适用条件:
    • 优化子结构:当一个问题的优化解包含了子问题的优化解时,我们说这个问题具有优化子结构。
    • 重叠子问题:在问题的求解过程中,很多子问题的解将被多次使用

算法设计步骤

  • 分析优化解的结构
    • 分析优化子结构:优化解的子结构一定是子问题的优化解
    • 重叠子问题:递归的过程中需要重复计算
  • 写递归方程(假设子问题已知,关注一次递归的细节即可
    • 定义变量及其意义:将最优解的代价用数学表达式表达出来,一般就是要求的最后结果
    • 定义变量之间的关系:递归地划分子问题,直至不可分,也就是初始结构
  • 自底向上地求解各个子问题
    • 获取构造最优解的信息:初始化的值,计算的方向
    • 计算优化解的代价并保存之
  • 编码
    • 根据构造最优解的信息构造优化解,获取所需结果
    • 如果需要,增加记录信息矩阵,递归的访问

举例:最长公共子序列

  • 分析优化解的结构

    • 优化子结构(证明比较多,不放了,主要思想就是反证替换法,子问题存在一个更好的优化解,则加上新条件后优于当前的优化解):
      在这里插入图片描述
    • 子问题重叠性:
      在这里插入图片描述
  • 写递归方程

    • 定义变量及其意义:最后要求LCS的长度,那就定义 C [ i , j ] C[i, j] C[i,j] X 0 → i X_{0 \to i} X0i Y 0 → j Y_{0 \to j} Y0j 的LCS的长度
    • 定义变量之间的关系:分别考虑刚开始,结尾和中间情况(需要分情况讨论)
      在这里插入图片描述
  • 自底向上地求解各个子问题

    • 获取构造最优解的信息:初始化所有i=0,j=0的变量为0,然后自左上至右下的计算
      在这里插入图片描述
    • 计算优化解的代价并保存之
  • 编码

    • 根据构造最优解的信息构造优化解,获取所需结果
      在这里插入图片描述
    • 如果需要,增加记录信息矩阵,递归的访问,如此找到的“LCS”是X与Y的LCS的Inverse在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值