初识动态规划

动态规划通常用来解决最优化问题在这类问题中,我们通过做出一组选择来达到最优解。在做出每个选择的同时,通常会生成与原问题形式相同的子问题。当多于一个选择子集都生成相同的子问题时,动态规划技术通常就会很有效,其关键技术技术对每个这样的子问题都保存其解,当相同的子问题重复出现时即可避免重复计算。(空间换时间)

**设计动态规划算法**
1.刻画一个最优解的结构特征
2.递归的定义最优解的值
3.计算最优解的值,通常采用自底向上的方法
4.利用计算出的信息构造一个最优解

动态规划两种等价的实现方法
1. 带备忘录的自顶向下法(top-down with memoization)。此方法仍然按自然的递归形式编写程序,但过程中会保存每个子问题的解,当需要一个子问题的解时,过程首先检查是否已经保存过此解;如果保存过此解,则无需重复计算,否则计算该子问题并保存解。这个过程称为带备忘录的,因为记录了之前计算的结果。
2. 自底向上法(bottom-up method)。一般需要恰当定义子问题的规模的概念,使得任何子问题的求解都只依赖于更小子问题的求解。因此我们可以将问题按照规模排序,按照由小到大的顺序进行求解。当求解某个子问题时,它所依赖的那些更小的子问题已经求完了,结果并已经保存。每个子问题字需要求解一次。

分治与优化:
分治技术的为题:
子问题是相互独立的
如果子问题不相互独立,分治算法讲重复计算公共子问题,效率低下
优化问题:
给定一组约束条件和一个代价函数,在解空间中搜索具有最小或者最大的优化解
很多优化问题可以分为多个子问题,子问题相互关联,子问题的解被重复使用。

动态规划的特点:
把原始问题划分成一系列子问题
求解每个子问题仅一次,并将其结果保存在一个表中,以后用到该解时直接获取,不必重复计算
* 试用范围*
一类优化问题:可分为多个相关子问题,子问题的解被重复使用
怎样使用动态规划
优化子结构:当一个问题的优化解包含了子问题的优化解时,我们说这个问题具有优化子结构;缩小子问题的集合,只需要那些优化问题中包含子问题,降低实现复杂性;优化子结构使得我们能够自下而上完成求解过程
重叠子问题:在问题的求解过程中,很多子问题的解将被多次使用

动态规划算法的设计步骤
分析优化解的结构
递归定义最优解的代价
自底向上的计算优化解的代价保存之,并获得最优解的信息
根据构造最优解的信息构造优化解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值