NOIP--搜索与动态规划-动态规划知识点分析
1. 概论:
动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。动态规划不是一种具体的算法,而是对解最优化问题的一种途径、一种方法。常见的动态规划有线性动态规划、区域动态规划、树型动态规划、背包问题等。
2. 知识点梳理:
2.1 基本模型
动态规划是解决一个多阶段决策过程的最优化问题的常用算法。所谓多阶段决策过程,指的是这样一类特殊过程,过程可以按照一定的顺序分解成若干个相互联系的阶段,在每一个阶段都需要作出决策。全部过程的决策是一个决策序列。而动态规划,就是解决这类过程的最优化问题。利用动态规划解决的多阶段决策过程,必须要有最优子结构特点。即对于一个最优的决策序列,其子序列也是最优的。
2.2 基本思想
动态规划算法的基本思想是:将带求解的问题分解成若干个相互联系的子问题,先求解子问题,然后从这些子问题的解中得到原问题的解;对于重复出现的子问题,只在第一次遇到的时候对它进行求解,并把答案保存起来,避免重复求解。该思想与记忆化搜索类似,即将计算步骤中的过程保存下来,避免重复运算。
2.3 基本步骤
动态规划算法求解的基本步骤如下:
(1)划分阶段:按照问题的时间或空间特征,把问题分为若干个阶段。在划分阶段时,注意划分后的阶段一定要是有序的或者是可排序的,否则问题就无法求解。
(2)确定状态和状态变量:注意状态必须满足无后效性。
(3)确定决策:找到子问题是进行动态规划的重要一步。动态规划和递推更多应考虑本问题由哪些已解决子问题构成,而不是考虑本问题对将来哪些问题有贡献。(4)确定边界条件,写出状态转移方程。
(5)代码编程
2.4 常见动态规划类型
线性动规:拦截导弹,合唱队形,挖地雷,建学校,剑客决斗等
区域动规:石子合并,加分二叉树,统计单词个数等
树形动规:贪吃的九头龙,二分查找树,聚会的欢乐,数字三角形等
背包问题:01背包问题,完全背包问题,分组背包问题,二维背包,装箱问题等
2.5 动态规划的优化
在NOIP中,动态规划很少需要优化。唯一较为常见的优化方式为“状态压缩”。由于动态规划实质上是一种以时间换空间的解题方式,因此,在空间复杂度上要非常注意。“状态压缩”根据题意找到一个更好的存储状态,避免朴素算法的空间复杂度过大。最经典的例子是NOIP2005中的题目“过河”。
NOIP信息学视频地址
视频地址
链接:https://pan.baidu.com/s/1tHo1DFMaDuMZAemNH60dmw
提取码:7jgr