2021-01-27 ACM训练笔记

Day7:DP算法入门

DP是Dynamic Programming(动态规划)的简称。

一、动态规划三要素:阶段,状态,决策

  如果把动态规划的求解过程看成一个工厂的生产线,阶段就是生产某个商品的不同的环节,状态就是工件当前的形态,决策就是对工件的操作。显然不同阶段是对产品的一个前面各个状态的小结,有一个个的小结构成了最终的整个生产线。每个状态间又有关联(下一个状态是由上一个状态做了某个决策后产生的)。
  阶段:假设要生产一批雪糕,在这个过程中要分好多环节:购买牛奶,对牛奶提纯处理,放入工厂加工,加工后的商品要包装,包装后就去销售……。每个环节可以看做是一个阶段。
  状态:产品在不同的时候有不同的状态,刚开始时只是白白的牛奶,进入生产后做成了各种造型,从冷冻库拿出来后就变成雪糕(由液态变成固态)。每个形态就是一个状态。
  决策:从液态变成固态经过了冰冻这一操作,这个操作就是一个决策。
  状态转移方程:一个状态经过一个决策变成了另外一个状态,这个过程就是状态转移,用来描述状态转移的方程就是状态转移方程。

二、动态规划的适用范围:

  动态规划用于解决多阶段决策最优化问题,但是不是所有的最优化问题都可以用动态规划解答呢?
一般在题目中出现求最优解的问题就要考虑动态规划了,但是否可以用还要满足两个条件:
    (1) 最优子结构(最优化原理)
    (2) 无后效性:当前状态是前面状态的完美总结,现在状态与过去状态始终无关。假如在状态i求解时用到状态j而状态j求解又用到状态k……状态N。但求状态N时需要用到状态i。这样求解状态的过程形成了环,就不能使用动态规划算法解答了。

三、动态规划解决问题的一般思路:

(1)模型匹配法:
  最先考虑的就是这个方法了。挖掘问题的本质,如果发现问题是自己熟悉的某个基本的模型,就直接套用,但要小心其中的一些小的变动,现在考题办都是基本模型的变形套用时要小心条件,三思而后行。这些基本模型在先面的分类中将一一介绍。
(2)三要素法
  仔细分析问题尝试着确定动态规划的三要素,不同问题的却定方向不同:
    先确定阶段的问题:数塔问题,和走路问题;
    先确定状态的问题:大多数都是先确定状态的;
    先确定决策的问题:背包问题。
  一般都是先从比较明显的地方入手,至于怎么知道哪个明显就是经验问题了,多做题就会发现。
(3)寻找规律法:
  这个方法很简单,耐心推几组数据后,看他们的规律,总结规律间的共性,有点贪心的意思。
(4)边界条件法:
  找到问题的边界条件,然后考虑边界条件与它的领接状态之间的关系。这个方法也很起效。
(5)放宽约束和增加约束:
  这个思想是在陈启锋的论文里看到的,具体内容就是给问题增加一些条件或删除一些条件使问题变的清晰。

四、动态规划的应用:

  动态规划是解决多决策问题最优化问题的一种良好算法,典型的DP应用就是背包问题,图像压缩问题等,DP可以决解决贪心算法和分治思想难以解决的一些问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值