动态规划性质;以及遇到一个问题,为什么能够使用动态规划

本文探讨了动态规划的最优子结构和重叠子问题特性,并通过对比与贪心、分治算法的区别,深入理解动态规划的适用场景。作者通过分析《算法导论》中的内容,指出动态规划的关键在于找到问题的最优子结构,并利用剪切-粘贴技术证明子问题的解即为最优解。同时,强调动态规划适用于存在重叠子问题且子问题无关的情况,而贪心和分治则有其特定的应用条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于动态规划之前刷过一些相关的题,但都是类似背包问题、爬楼梯问题,那时候觉得这个算法挺简单。直到最近在看jieba的源码,其中两次使用到动态规划,一次是很有名的viterbi算法,另一次是在有向无环图中查找最优分词序列时。在看这两部分的源码时感觉自己对动态规划的理解太过浅薄,于是重新翻看《算法导论》的第15.3节----动态规划原理。觉得理解了一个问题为什么能够使用动态规划?拿到一个问题时,如何判断是否应该使用动态规划?对于书中的一些关键点做一些记录。

最优子结构

  • 如果一个问题的最优解包含其子问题的最优解,我们就称此问题具有最优子结构
  • 一个问题具有最优子结构,可能使用动态规划方法,也可能使用贪心方法。所以最优子结构只是一个线索,不是看到有最优子结构就一定是用动态规划求解
  • 发掘最优子结构的通用模式:
  1. 证明问题最优解的第一个组成部分是做出一个选择,做出这次选择会产生一个或多个待解的子问题
  2. 对于一个给定问题,在其可能的第一步选择中,你假定已经知道哪种选择才会得到最优解。你现在并不关心这种选择具体是如何得到的,只是假定已经知道了这种选择
  3. 给定可获得最优解的选择后,你确定这次选择会产生哪些子问题,以及如何更好的刻画子问题空间
  4. 利用“剪切-粘贴”技术证明:作为构成原问题最优解的组成部分,每个子问题的解就是它本身的最优解。
  • 对于不同问题领域,最优子结构的不同体现在两个方面:
  1. 原问题的最优解中涉及多少个子问题
  2. 在确定最优解使用哪些子问题时,我们需要考察多少种选择
  • 动态规划与贪心的区别:
  1. 动态规
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值