算法设计与分析实验报告实验名称动态规划算法实现多段图的最短路径问题评分实验日期年月日指导教师姓名专业班级学号一
理解最优子结构的问题
有一类问题的活动过程可以分成若干个阶段,而且在任一阶段后的行为依赖于该阶段的状态,与该阶段之前的过程如何达到这种状态的方式无关
这类问题的解决是多阶段的决策过程
在50年代,贝尔曼(RichardBellman)等人提出了解决这类问题的“最优化原理”,从而创建了最优化问题的一种新的算法设计方法-动态规划
对于一个多阶段过程问题,是否可以分段实现最优决策,依赖于该问题是否有最优子结构性质,能否采用动态规划的方法,还要看该问题的子问题是否具有重叠性质
最优子结构性质:原问题的最优解包含了其子问题的最优解
子问题重叠性质:每次产生的子问题并不总是新问题,有些子问题被反复计算多次
问题的最优子结构性质和子问题重叠性质是采用动态规划算法的两个基本要素
理解分段决策Bellman方程
每一点最优都是上一点最优加上这段长度
即当前最优只与上一步有关
Us初始值,uj第j段的最优值
一般方法1)找出最优解的性质,并刻画其结构特征;2)递归地定义最优值(写出动态规划方程);3)以自底向上的方式计算出最优值;4)根据计算最优值时得到的信息,构造一个最优解
步骤1-3是动态规划算法的基本步骤
在只需要求出最优值的情形,步骤4可以省略,步骤3中记录的信息也较少;若需要求出问题的一个最优解,则必须执行步骤4,步骤3中记录的信息必须足够多以便构造最优解
编程实现多段图的最短路径问题的动态规划算法
图的数据结构采用邻接表
要求用文件装入5个多段图数据,编写从文件到邻接表的函数
验证算法的时间复杂性
程序算法多段图算法:ProcedureFGRAPH(E,k,n,P)//输入是按段的顺序给结点编号的,有n个结点的k段图