动态规划思想以及常见应用

本文介绍了动态规划的基本思想,对比了动态规划与贪婪算法、分治法的区别,并通过最长公共子序列、最长递增子序列、0-1背包问题等实例详细阐述了动态规划的求解策略。同时,指出动态规划的关键在于找到状态转换方程,强调利用数组存储中间变量以提高效率。
摘要由CSDN通过智能技术生成

一 动态规划的基本思想以及和贪婪算法、分治法的比较

动态规划的基本思想:将复杂问题进行分解,通过求解小规模子问题反推出原问题的结果。动态规划适合求解多阶段决策问题的最优解(可以简单理解为有状态转换的阶段性问题)。这些问题必须满足最优化原理和子问题的无后向性。

最优化原理:不管之前的决策是否最优,但是一定要保证从现在开始的决策是在之前决策基础上的最优决策。

无后向性原理:当各个子阶段的子问题确定以后,对于某个特定阶段的子问题来说,它之前的各个阶段的子问题的决策只影响当前阶段的决策,而对该阶段之后的决策不产生影响。即每个阶段的决策只受之前决策的影响,不影响之后各阶段的决策。

动态规划与贪婪算法以及分治法的比较:

三者都需要对原问题进行分解,分解为需要求解的子问题。分治法求解的子问题是独立的,每个问题的求解模式一样,分别求解再合并就是原问题的解。而贪婪算法只考虑当前状态,并依据贪婪法则取得局部最优解,直到扩展到原来的问题。动态规划的子问题需要满足最优化原理和无后向性原理。

解决动态规划问题的关键是找到状态转换方程。下面介绍一些常见的应用:

一 最长公共子序列

问题:对两个子序列S和T,求解S和T最大公共子序列的长度。

例如 S:ABCDEF;T:ACDF。则最大子序列为ACDF。

分析:假设a[i][j]表示S中下标[0,i]和T中下标[0,j]之间序列的最大公共子序列。分析可知:

代码如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值