动态规划-基本思想

动态规划是一种运筹学方法,由贝尔曼提出,常用于解决最优化问题。它通过保存子问题的解避免重复计算,适用于具有最优子结构、无后效性和子问题重叠性的问题。动态规划通过状态转移方程找到问题的最优解,常用于背包问题、最短路径等。解题步骤包括问题分解、确定状态和初始状态值、建立状态转移方程。

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

一、定义

动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产、军事以及自动化控制等领域,并在背包问题、生产经营问题、资金管理问题、资源分配问题最短路径问题和复杂系统可靠性问题等中取得了显著的效果 。 

二、基本思想和策略

        通常用于求解具有最优性质的问题,跟分治法类似,基本思想也是将待求解问题分解成若干个子问题,用子问题的解得到原问题的解。

        与分治法不同的是,动态规划求解的问题,子问题往往不是相互独立的,若用分治法解这类问题,分解得到的子问题太多,有些子问题,重复计算很多次。

        如果能保存已解决子问题的解,需要时找出已求解的解,就可以避免大量重复计算,所以可以用一个表来记录已求解子问题的解,这就是动态规划的基本思路。

三、适用情况和基本特征

        适用动态规划算法必须满足最优化原理、无后效性和子问题重叠性

1. 最优化原理(最优子结构性质)

        即一个最优化策略具有这样的性质,不论之前的状态和决策如何,对之前决策所形成的状态,后边的决策必须构成最优策略。也就是说,一个最优化策略的子策略总是最优的。一个问题满足最优化原理又称其具有最优子结构性质。

2. 无后效性

        即某阶段状态一旦确定,就不受这个状态之后决策的影响,某状态之后的过程不会影响之前的状态,换句话说,每个状态都是过去历史的一个完整总结,这就是无后向性,又称为无后效性。

3. 子问题重叠性

        即子问题之间不是相互独立的,一个子问题可能在之后决策中被多次用到。

四、算法特点总结

        动态规划将原来具有指数级时间复杂度的搜索算法,改进成了具有多项式时间复杂度的算法。其中的关键就是解决冗余,这是动态规划的根本目的。动态规划实质上是一种以空间换时间的技术,不得不存储各种状态,所以它的空间复杂度要大于其他算法。

        到底什么时候用动态规划:当每个阶段的最优状态可以从之前某个阶段的某个或者某些状态直接得到,而不管之前这个状态是如何得到的。

五、解题步骤 

  1. 将原问题分解为子问题(注意:1,子问题与原问题形式相同或类似,只是问题规模变小了,从而变简单了; 2,子问题一旦求出就要保存下来,保证每个子问题只求解一遍)
  2. 确定状态(状态:在动规解题中,我们将和子问题相关的各个变量的一组取值,称之为一个"状态",一个状态对应一个或多个子问题所谓的在某个状态的值,这个就是状态所对应的子问题的解,所有状态的集合称为"状态空间".我的理解就是状态就是某个问题某组变量,状态空间就是该问题的所有组变量) 另外:整个问题的时间复杂度就是状态数目乘以每个状态所需要的时间
  3. 确定一些初始状态(边界条件)的值 (这个视情况而定,千万别以为就是最简单的那个子问题解,上面只是例子,真正实践动规千变万化)
  4. 确定状态转移方程 (这一步和第三步是最关键的 记住"人人为我"递推,由已知
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走在时光柱上的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值