第8章 动态规划.ppt

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计与分析 计算机与信息学院 使用教材 使用教材 第8章 动态规划 动态规划概述 斐波纳契数列F(n) 计算二项式系数 数塔 有向无环图的最短路径问题 Warshall 传递闭包算法 完全最短路径问题的Floyd算法 最优二叉查找树 01背包问题 动态规划概述 动态规划概述 动态规划(Dynamic Programming),在20 世纪50年代由美国数学家Richard Bellman(理查德 .贝尔曼)发明,作为多阶段决策过程最优化的一种通用方法,对最优化问题提出最优性原则,从而创建最优化问题的一种新算法设计技术——动态规划,它是一种重要的应用数学工具。至少在计算机科学圈子里,人们不仅用它解决特定类型的最优化问题,而最终把它作为一种通用的算法设计技术,即包括某些非最优化问题。 动态规划概述 多阶段决策过程最优化: 现实世界里有许多问题属于这种情况:它有很多解,应用要求最优解。穷举法通过找出全部解,再从中选出最优解。这种方法对于那些计算复杂度很高、计算量很大的问题(如求最佳子集的组合问题),要找出一切可能解,所耗费的计算时间可能是不可以接受的。因此,人们为了降低求解问题的难度,把求解过程分为一系列阶段,各个阶段依次按照最优性原则计算,最后阶段计算得到最优解。包括 分段、求解 两大步。 注:不能段化的问题不能用动态规划法求解。 最优性原则 最优性原则 动态规划算法思想 1.将待求解的问题分解成若干个子问题,并存储子问题的解而避免计算重复的子问题,并由子问题的解得到原问题的解。 2.动态规划算法通常用于求解具有某种最优性质的问题。 3.动态规划算法的基本要素: 最优子结构性质和重叠子问题。 最优子结构性质: 问题的最优解包含着它的子问题的最优解。即不管前面的策略如何,此后的决策必须是基于当前状态(由上一次决策产生)的最优决策。 重叠子问题: 在用递归算法自顶向下解问题时,每次产生的子问题并不总是新问题,有些问题被反复计算多次。对每个子问题只解一次,然后将其解保存起来,以后再遇到同样的问题时就可以直接引用,不必重新求解。 解决问题的基本特征 1. 动态规划一般解决最值(最优,最大,最小,最长……)问题; 2. 动态规划解决的问题一般是离散的,可以分解(划分阶段)的; 3. 动态规划解决的问题必须包含最优子结构,即可以由(n-1)的最优推导出n的最优; 解决问题的基本步骤 设计一个标准的动态规划算法的步骤: 1. 划分阶段; 2. 选择状态; 3. 确定决策并写出状态转移方程。 实际应用当中的简化步骤: 1. 刻画最优解的结构特性. (一维,二维,三维数组) 2. 递归的定义最优解. (状态转移方程) 3. 以自底向上的方法来计算最优解. 4. 从计算得到的解来构造一个最优解. 斐波纳契数列F(n) 动态规划应用于非最优化问题例 步骤1:用F(n)表示在斐波纳契数列中第n个数的值; 步骤2:状态转移方程: 步骤3:以自底向上的方法来计算最优解 步骤4:在数组中分析构造出问题的解 递归 vs 动态规划 计算二项式系数 计算二项式系数是把动态规划应用于非最优化问题的一个标准例子 在二项式系数的多种特性之中,只关心两种: 当nk0时,C(n,k)=C(n-1,k-1)+C(n-1,k) 以及 C(n,0)=C(n,n)=1 步骤1:用C(n,k)表示二项式系数; 步骤2:状态转移方程: 步骤3:以自底向上的方法来计算最优解 步骤4:在数组中分析构造出问题的解 为了计算c(n,k),一行接一行地填充下表,从行0开始,到行n结束 算法 Binomial(n,k) //用动态规划算法计算C(n,k) //输入:—对非负整数n=k=0 //输出:C(n,k)的值 for i← 0 to n do for j ← 0 to min(i,k) do if j=0 or j=k C[i,j] ← 1 else C[i,j] ←C[i-1,j-1]+C[i-1,j] return C[n,k] 该算法的时间效率如何呢? 显然,该算法的基本操作是加法 数塔 数塔 问题:设有一三角形数塔如图。求一条自塔顶到塔底的路,该路径上节点值之和最大。 动态规

文档评论(0)

精华文档888 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档