先来看看《信息学奥赛一本通第5版》是怎么说的:

动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。不像前面所述的那些搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。因此读者在学习时,除了要对基本概念和方法正确理解外,必须具体问题具体分析处理,以丰富的想象力去建立模型,用创造性的技巧去求解。我们也可以通过对若干有代表性的问题的动态规划算法进行分析、讨论,逐渐学会并掌握这一设计方法。

举个栗子:
《信息学奥赛一本通第5版》的例9.1:,题目是,最短路径问题。下图给出了一个地图,地图中的每个顶点代表一个城市,两个城市间的一条连线代表道路,连线上的数值代表道路的长度。现在想从城市A到达城市E,怎样走路程最短?最短路程的长度是多少?
图:


,这是《信息学奥赛一本通第5版》的解析:

【算法分析】
把A到E的全过程分成四个阶段,用K表示阶段变量,第1阶段有一个初始状态A,有两条可供选择的支路A-B1、A-B2;第2阶段有两个初始状态B1、B2,B1有三条可供选择的支路,B2有两条可供选择的支路……。用DK(XI,X+1J)表示在第K阶段由初始状态XI到下阶段的初始状态X+1J的路径距离,FK(XI)表示从第K阶段的XI到终点E的最短距离,利用倒推的方法,求解A到E的最短距离。 具体计算过程如下:
S1: K = 4 有
F4(D1)= 3,
F4(D2)= 4,
F4(D3)= 3;
S2: K = 3 有
F3(C1)= MIN{ D3(C1,D1)+ F4(D1),D3(C1,D2)+ F4(D2)}
= MIN{ 5+3,6+4 } = 8
F3(C2)= D3(C2,D1)+ F4(D1)= 5+3 = 8
F3(C3)= D3(C3,D3)+ F4(D3)= 8+3 = 11
F3(C4)= D3(C4,D3)+ F4(D3)= 3+3 = 6
S3: K = 2 有
F2(B1)= MIN{ D2(B1,C1)+ F3(C1),D2(B1,C2)+ F3(C2),
D2(B1,C3)+ F3(C3)} = MIN{ 1+8,6+8,3+11} = 9
F2(B2)= MIN{ D2(B2,C2)+ F3(C2),D2(B2,C4)+ F3(C4)}
= MIN{ 8+8,4+6 } = 10
S4: K = 1 有
F1(A)= MIN{ D1(A,B1)+ F2(B1),D1(A,B2)+ F2(B2)}
= MIN{ 5+9,3+10} = 13
因此由A点到E点的全过程最短路径为A→B2→C4→D3→E;最短路程长度为13。
从以上过程可以看出,每个阶段中,都求出本阶段的各个初始状态到终点E的最短距离,当逆序倒推到过程起点A时,便得到了全过程的最短路径和最短距离。
在上例的多阶段决策问题中,各个阶段采取的决策,一般来说是与阶段有关的,决策依赖于当前状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的,故有“动态”的含义,我们称这种解决多阶段决策最优化的过程为动态规划程序设计方法。

我的理解是,这题是一道求最优的题目,最短路径目前已知比较普通的有:BFS,DFS,贪心,DP。BFS明显是不行,因为每个变化的代价不一样,DFS虽然是万能的金钥匙,但时间复杂度太高,不行。贪心就更不用说了,没有局部最优导致全局最优。所以,用DP,DP上面已经讲得很详细了。
然后是动态规划的基本概念和基本模型构成 :

现在我们来介绍动态规划的基本概念。
1. 阶段和阶段变量:
用动态规划求解一个问题时,需要将问题的全过程恰当地分成若干个相互联系的阶段,以便按一定的次序去求解。描述阶段的变量称为阶段变量,通常用K表示,阶段的划分一般是根据时间和空间的自然特征来划分,同时阶段的划分要便于把问题转化成多阶段决策过程,如例题1中,可将其划分成4个阶段,即K = 1,2,3,4。
2. 状态和状态变量:
某一阶段的出发位置称为状态,通常一个阶段包含若干状态。一般地,状态可由变量来描述,用来描述状态的变量称为状态变量。如例题1中,C3是一个状态变量。
3. 决策、决策变量和决策允许集合:
在对问题的处理中作出的每种选择性的行动就是决策。即从该阶段的每一个状态出发,通过一次选择性的行动转移至下一阶段的相应状态。一个实际问题可能要有多次决策和多个决策点,在每一个阶段的每一个状态中都需要有一次决策,决策也可以用变量来描述,称这种变量为决策变量。在实际问题中,决策变量的取值往往限制在某一个范围之内,此范围称为允许决策集合。如例题1中,F3(C3)就是一个决策变量。
4.策略和最优策略:
所有阶段依次排列构成问题的全过程。全过程中各阶段决策变量所组成的有序总体称为策略。在实际问题中,从决策允许集合中找出最优效果的策略成为最优策略。
5. 状态转移方程
前一阶段的终点就是后一阶段的起点,对前一阶段的状态作出某种决策,产生后一阶段的状态,这种关系描述了由k阶段到k+1阶段状态的演变规律,称为状态转移方程。

我的见解是:DP(动态规划)其实是一种高级贪心——用递推做的贪心,递推与DP最大的区别就在于递推只是单纯的推,而DP是有选择性的递推

然后是最优化原理与无后效性 :

上面已经介绍了动态规划模型的基本组成,现在需要解决的问题是:什么样的“多阶段决策问题”才可以采用动态规划的方法求解。
一般来说,能够采用动态规划方法求解的问题,必须满足最优化原理和无后效性原则:
1、动态规划的最优化原理。作为整个过程的最优策略具有:无论过去的状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略的性质。也可以通俗地理解为子问题的局部最优将导致整个问题的全局最优,即问题具有最优子结构的性质,也就是说一个问题的最优解只取决于其子问题的最优解,而非最优解对问题的求解没有影响。在例题1最短路径问题中,A到E的最优路径上的任一点到终点E的路径,也必然是该点到终点E的一条最优路径,即整体优化可以分解为若干个局部优化。
2、动态规划的无后效性原则。所谓无后效性原则,指的是这样一种性质:某阶段的状态一旦确定,则此后过程的演变不再受此前各状态及决策的影响。也就是说,“未来与过去无关”,当前的状态是此前历史的一个完整的总结,此前的历史只能通过当前的状态去影响过程未来的演变。在例题1最短路径问题中,问题被划分成各个阶段之后,阶段K中的状态只能由阶段K+1中的状态通过状态转移方程得来,与其它状态没有关系,特别与未发生的状态没有关系,例如从Ci到E的最短路径,只与Ci的位置有关,它是由Di中的状态通过状态转移方程得来,与E状态,特别是A到Ci的路径选择无关,这就是无后效性。
由此可见,对于不能划分阶段的问题,不能运用动态规划来解;对于能划分阶段,但不符合最优化原理的,也不能用动态规划来解;既能划分阶段,又符合最优化原理的,但不具备无后效性原则,还是不能用动态规划来解;误用动态规划程序设计方法求解会导致错误的结果。

动态规划——什么是动态规划?相关推荐

  1. 《强化学习与最优控制》学习笔记(一):确定性动态规划和随机性动态规划

    写在前面的 这本书的作者是Dimitri Panteli Bertsekas教授,1942年出生于希腊雅典,美国工程院院士,麻省理工大学电子工程及计算机科学教授.Bertsekas教授因其在算法优化与 ...

  2. 动态规划-03-线性动态规划

    一.简介 动态规划主要任务,确定状态方程(fn 和 fn-1.fn-2),和边界条件(n=1,2),联想高中递推问题. 线性动态规划的主要特点是状态的推导是按照问题规模 i 从小到大依次推过去的,较大 ...

  3. 【动态规划】线性动态规划

    吐槽:动态规划这个东西,只要推不出状态转移方程,一切都白搭 基础知识 一. 动态规划 动态规划中最重要的三个概念:最优子结构,重复子问题,无后效性. 最优子结构:如果问题的最优解所包含的子问题的解也是 ...

  4. 【算法】动态规划 ④ ( 动态规划分类 | 坐标型动态规划 | 前缀划分型动态规划 | 前缀匹配型动态规划 | 区间型动态规划 | 背包型动态规划 )

    文章目录 一.动态规划场景 二.动态规划分类 1.坐标型动态规划 2.前缀划分型动态规划 3.前缀匹配型动态规划 4.区间型动态规划 5.背包型动态规划 一.动态规划场景 动态规划 动态规划使用场景 ...

  5. 0-1背包问题 动态规划java_C#使用动态规划解决0-1背包问题实例分析

    // 利用动态规划解决0-1背包问题 using System; using System.Collections.Generic; using System.Linq; using System.T ...

  6. python动态规划图解_动态规划案例之python实现(一)

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两 ...

  7. 【动态规划1】动态规划的引入(今天刷洛谷了嘛)

    注: P4017 最大食物链计数 因为现在还不会拓扑排序,所以暂且放到以后去解决! P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles #include&l ...

  8. 动态规划java LCS_动态规划递归求解LCS长度 | 学步园

    这个问题的叙述太多了,就不重复了.这里我只是球出了LCS的长度,事实上,长度还是非常有用的,如判断两个字符串相似程度.主要是想说明的是,利用递归来求解.非常方便.今天下午了试了3个题,一个回文数,一个 ...

  9. 钢条分割 动态规划java_【动态规划】初识,钢条切割问题

    正文之前其实动态规划老早之前就看过, 但是可惜的是印象不深,到今天彻底忘得差不多了,这两天看<算法导论>终于让我啃下了二叉搜索树和红黑树两个家伙,虽然还未曾熟练于胸,但是基本能用了...现 ...

  10. java动态规划解法_动态规划通用解法总结(示例代码)

    背景:leetcode刷题遇到动态规划的题目,做不出来时看别人的code,也可以理解,但还是没有找到create solution的技巧,单纯的comprehend and remeber,直到遇到了 ...

最新文章

  1. Python爬虫之selenium库使用详解
  2. 什么是RestTemplate
  3. 路由相关知识,静态路由、默认路由、浮动路由的概念以及基本设置
  4. [2]-使用busybox-1.17.2制作文件系统
  5. java 基础实战_Java基础实战(三)
  6. Jmeter(四十二)_控制器下遍历一组参数
  7. android中屏保功能项目,【Android】一段时间不操作弹出【屏保】效果
  8. this is a test
  9. java questionbank_JavaQuestionBank
  10. 【算法动画图解】:安利一款昨天发现的app
  11. 熊出没之伐木机器人_盘点熊出没中李老板的五大伐木工,光头强无人能代替
  12. sql server2000挂起的解决方法
  13. oracle18c静默安装教程,Oracle 18c 19c 安装的 DBT-50000 错误解决
  14. 最近碰到的上架苹果4.3问题分析
  15. java:编写一个求平方的窗体
  16. 没有鼠标就无法对计算机进行操作,电脑鼠标不灵敏是什么原因?怎么解决?
  17. 基于Keras的卷积神经网络模型预测--狗的品种识别
  18. JavaSE-Lambada
  19. 如何用计算机看dvd,电脑怎么播放dvd光盘_电脑无法播放dvd光盘
  20. Windows 2003全面优化

热门文章

  1. 最新H5网页分享到Twitter、Facebook带缩略图
  2. 网络拨测DialTest简单介绍
  3. 文件或目录损坏且无法读取 解决方法
  4. 群辉服务器如何清理缓存和文件,群晖的硬盘缓存到底肿么清理
  5. Oracle 查询时间(当日)
  6. 科研写作之Origin使用心得
  7. 指针、堆栈(DAY 26)
  8. JS中的pipe原理
  9. 【owt-server】 只sync webrtc-m79并构建
  10. mysql中文名字段引起的触发器语法错误