算法设计实例教程 第7章 动态规划算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 根据对价格表进行分析,发现当木材长度为10时单位长度的价格最高,当木材长度为6时 单位长度的价格第二高,其单位长度的价格的排序依次是10>6>3,9>2,8>7>4>5>1。根 据贪心算法策略,木材切割后单位长度的价格越高越好,所以切割的方案应该是先全切长 度为10的木材,剩下的木材长度不足10的按照单位长度的价格高低来选择切割长度。
7 动态规划算法
7.1基本思想和概念
• 在使用动态规划算法求解时,每次产生的子问题并不总是新问题,有些子问题反复计算多 次,动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后 将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是在表格中 简单地查看一下结果,从而获得较高的效率。因此,在使用动态规划的时候,问题必须满 足以下条件: • 1.最优子结构
7 动态规划算法
算法设计实 例教程
7 动态规划算法
教 学 分 析
CONCENTS
目1 录2
3 4 5 6 7 8 9
第1章 数据结构基础 第2章 基础算法 第3章 排序算法 第4章 查 找 第5章 字符串和高精度运算
第6章 图论算法
第7章 动态规划算法
第8章计算几何基础 第9章 高级算法
7 动态规划算法
7 动态规划算法
7.2算法原理和步骤
• 如果用分治思想的采用递归算法策略,设计一个递归函数,函数输入当前切割木材的价值和未切割木材的长度,
输出最优收益。当未切割木材的长度为0的时候,递归停止。有了这个递归函数之后,问题其实就是遍历所有的
7 动态规划算法
7.2算法原理和步骤
• 下面通过一个例子来说明动态规划算法的基本原理。现在有一段长度为n的木材,要将其切 割后售出,木材长度与价格的对应关系如下表,问如何切割能获得最大收益。
长度i 1 2 3 4 5 6 7 8 9 10 价格pi 1 5 8 9 10 17 17 20 24 30
7 动态规划算法
7.1基本思想和概念
• 在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶 段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。因此各个阶 段决策的选取不能任意确定,它依赖于当前面临的状态,又影响以后的发展。当各个阶段 决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线。这种把一 个问题看作是一个前后关联具有链状结构的多阶段过程就称为多阶段决策过程,这种问题 称为多阶段决策问题。在多阶段决策问题中,各个阶段采取的决策,一般来说是与时间有 关的,决策依赖于当前状态,又随即引起状态的转移,一个决策序列就是在变化的状态中 产生出来的,故有“动态”的含义,称这种解决多阶段决策最优化的过程为动态规划方法 (DP,dynamic programming)。
7 动态规划算法
7.1基本思想和概念
• 虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但 是一些与时间无关的静态规划(如线性规划、非线性规划),只要人为地 引进时间因素,把它视为多阶段决策过程,也可以用动态规划方法方便 地求解。动态规划常常适用于有重叠子问题和最优子结构性质的问题, 动态规划方法所耗时间往往远少于朴素解法。
第7章 动态规划算法
• 动态规划(Dynamic Programming,DP)是运筹学的一个分支, 是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔 曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出 了著名的最优化原理,从而创立了动态规划。动态规划的应用极其 广泛,包括工程技术、经济、工业生产、军事以及自动化控制等领 域,并在背包问题、生产经营问题、资金管理问题、资源分配问题、 最短路径问题和复杂系统可靠性问题等中取得了显著的效果。本章 主要介绍动态规划的基本思想和概念、算法的原理和步骤以及常见 的背包问题分析和解决方法。
• 如果问题的最优解所包含的子问题的解也是最优,我们就称该问题具有最优子结 构性质(即满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重 要线索。
• 2.无后效性 • 即子问题的解一旦确定,就不再改变,不受在这之后、包含它的更大的问题的求解
决策影响。
7 动态规划算法
7.2算法原理和步骤
• 通常在求解具有某种最优性质的问题时,可能会有许多可行解,每一个 解都对应于一个值,我们希望找到具有最优值的解。一般来说,只要问 题可以划分为规模更小的子问题,并且原问题的最优解中包含了子问题 的最优解,则可以考虑用动态规划解决。
7 动态规划算法
7.1基本思想和概念
• 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问 题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的 是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。 若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复 计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出 已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个 表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被 计算过,就将其结果填入表中。这就是动态规划法的基本思路。具体的动态规 划算法多种多样,但它们具有相同的填表格式。
• 动态规划的实质是分治思想和解决冗余的结合。因此,动态规划是一种将问题实例分解为 更小的、相似的子问题,并存储子问题的解,使得每个子问题只求解一次,最终获得原问 题的答案,以解决最优化问题的算法策略。这一点与贪心算法和递归算法相比是类似的, 但它们之间的区别在于贪心算法选择当前最优解,而动态规划通过求解局部子问题的最优 解来达到全局最优解。在计算过程中递归算法需要对子问题进行重复计算,需要耗费更多 的时间与空间,而动态规划对每个子问题只求解一次。虽然可以对递归法进行优化,使用 记忆化搜索的方式减少重复计算,但在解决重叠子问题时,本质上记忆化搜索的递归算法 是自顶向下的解决问题,而动态规划算法则是自底向上的解决问题。
相关文档
最新文档