第七章 动态规划法1(算法分析与设计课件)
《动态规划法》课件
动态规划法的发展趋势
混合整数动态规划
将整数变量引入动态规划中,解决更复杂的问题 ,如组合优化问题。
动态规划与机器学习结合
利用机器学习算法辅助动态规划求解,提高算法 的效率和准确性。
ABCD
多目标动态规划
考虑多个相互冲突的目标,寻求最优解的权衡。
分布式动态规划
将问题分解为多个子问题,在分布式系统中并行 求解,提高大规模问题的处理能力。
排班问题
总结词
动态规划法可以用于解决排班问题,使得员工的工作计 划安排最优。
详细描述
排班问题是一个多约束优化问题,涉及到员工的工作时 间、班次、休息时间等多个因素。通过构建状态转移方 程和优先级规则,动态规划法能够求解出满足所有约束 条件的最佳排班方案。
生产调度问题
总结词
动态规划法可以应用于生产调度问题,优化生产流程 和资源分配。
策略
一系列决策的集合,表示从初始状态到终止状态的整个求解过程。
转移方程与最优解
转移方程
描述状态转移的数学方程,表示从一个状态转移到另一个状 态的关系。
最优解
在所有可能的策略中,能够使目标函数达到最优值的策略。
03
动态规划法的求解步骤
问题的分解
总结词
将复杂问题分解为若干个子问题
详细描述
动态规划法首先将原问题分解为若干个子问题,每个子问题都是原问题的简化版本。通过解决这些子 问题,可以逐步推导出原问题的解决方案。
02
动态规划法的基本概念
阶段与状态
01
阶段
将问题的求解过程划分为若干个 相互联系的阶段,以便按一定的 次序进行求解。
02
03
状态
状态转移
在某一时刻,问题所处的情况或 状态。
最新2019-算法设计与分析动态规划实例讲解-PPT课件
(三)、建立动态规划模型的步骤
1、划分阶段k
划分阶段是运用动态规划求解多阶段决策问题的第一 步,在确定多阶段特性后,按时间或空间先后顺序, 将过程划分为若干相互联系的阶段。对于静态问题要 人为地赋予“时间”概念,以便划分阶段。
f1(s1)
最优目标函数值
V 1 * ,n V 1 * ,n (s 1 * ,u 1 * 子, 从策略k,的到s 最终n * 优点,u 目最n * 标优)函策数略值
fs ov ps tu s
, , ,
k k
k ,n k k
uu , ,
k
n
n 1
(二)、动态规划的基本思想
1、动态规划方法的关键在于正确地写出基本的递推 关系式和恰当的边界条件(简称基本方程)。要做到 这一点,就必须将问题的过程分成几个相互联系的阶 段,恰当的选取状态变量和决策变量及定义最优值函 数,从而把一个大问题转化成一组同类型的子问题, 然后逐个求解。即从边界条件开始,逐段递推寻优, 在每一个子问题的求解中,均利用了它前面的子问题 的最优化结果,依次进行,最后一个子问题所得的最 优解,就是整个问题的最优解。
二、最短路径问题
例一、从A 地到D 地要铺设一条煤气管道,其中需经过 两级中间站,两点之间的连线上的数字表示距离,如 图所示。问应该选择什么路线,使总距离最短?
3
C1
2 B1 3
1
A
1 2
3
C2
3
D
4 B2 1
4
C3
动态规划算法教学PPT
03
动态规划算法的实现步骤
明确问题,建立数学模型
1
确定问题的目标和约束条件,将其转化为数学模 型。
2
理解问题的阶段划分,将问题分解为若干个子问 题。
3
确定状态变量和决策变量,以便描述子问题的状 态和决策。
划分阶段,确定状态变量和决策变量
01
根据问题的阶段划分,将问题分解为若干个子问题。
02
确定状态变量和决策变量,以便描述子问题的状态 和决策。
02
将子问题的最优解组合起来,得到原问题的最优解。
对最优解进行验证和性能评估,确保其满足问题的要求。
03
04
动态规划算法的优化技巧
分支定界法
分支定界法是一种求解优化问题的算 法,它通过不断生成问题的分支并确 定每个分支的界限,来寻找最优解。 在动态规划中,分支定界法可以用来 优化状态转移方程,减少计算量。
详细描述
多目标规划问题在实际生活中应用广泛,如资源分配、项目计划、城市规划等领 域都有涉及。常用的求解多目标规划的方法包括权重和法、帕累托最优解等。
多阶段决策问题
总结词
多阶段决策问题是动态规划中的一类,解决的问题需要在多个阶段做出决策,每个阶段的决策都会影响到后续阶 段的决策。
详细描述
多阶段决策问题在实际生活中应用广泛,如生产计划、库存管理、路径规划等领域都有涉及。常用的求解多阶段 决策问题的方法包括递归法、动态规划等。
特点
动态规划算法具有最优子结构、重叠 子问题和最优解性质等特征。
动态规划算法的应用领域
计算机科学
在计算机科学中,动态规划算法广泛应用于字符 串处理、排序、数据压缩和机器学习等领域。
电子工程
在电子工程中,动态规划算法用于信号处理、通 信和控制系统等领域。
算法设计与分析讲义动态规划
动态规划xx年xx月xx日CATALOGUE目录•动态规划算法简介•动态规划的基本原理•常见动态规划问题分析•动态规划算法优化•动态规划在实际应用中的实例•总结与展望01动态规划算法简介动态规划是一种通过将问题分解为相互重叠的子问题来解决问题的方法动态规划适合用于最优化决策序列,具有重叠子问题和最优子结构两个特征1 2 3动态规划的核心思想是记忆已经求解过的子问题的解,避免了重复计算动态规划通常用于最优化问题,可以得出全局最优解动态规划通常是基于自底向上的思路进行实现动态规划的应用场景最短路径问题如Floyd算法、Dijkstra算法等资源分配问题如背包问题、装箱问题、货郎担问题等序列比对问题如Smith-Waterman算法、Genetic Code算法等控制领域如最优控制、预测控制等计算机视觉领域如光流计算、立体视觉匹配等02动态规划的基本原理03自底向上的设计方法可以节省存储空间,减少重复计算,提高算法效率。
动态规划的自底向上设计方法01动态规划的自底向上设计方法是一种通过将问题分解为子问题,并从简单子问题求解逐步设计复杂问题的策略。
02在自底向上的设计过程中,首先解决基本子问题,并利用这些解来解决更大规模的问题,逐步构建出原问题的最优解。
动态规划的递推关系式是算法的核心,它通过将问题分解为子问题,将问题的解表示为子问题的解的组合。
递推关系式通常是一个数学公式,它根据子问题的解来推导出更大规模问题的解。
在递推关系式中,每个子问题的解都会被存储起来,以便后续使用。
动态规划的递推关系式动态规划的边界条件在动态规划中,每个子问题都有一个起始点和终止点,这些点就是边界条件。
边界条件确定了问题的起始状态和终止状态,使得算法可以正确地求解问题。
动态规划的边界条件是算法中非常重要的一个概念,它规定了问题的边界情况。
03常见动态规划问题分析Dijkstra算法、Floyd-Warshall算法、Bellman-Ford 算法总结词最短路径问题是在图中找到从起点到终点的最短路径,有多种算法实现,如Dijkstra算法、Floyd-Warshall 算法和Bellman-Ford算法等。
动态规划(完整)ppt课件
3
• Ⅲ --Ⅳ :
B1—C1—T
4
• Ⅱ--Ⅲ--Ⅳ :A2—B1—C1—T
7
• Ⅰ--Ⅱ--Ⅲ --Ⅳ:
•
Q—A2—B1—C1—T
11
•
Q--A3—B1—C1—T
11
•
Q--A3—B2—C2—T
11
最新版整理ppt
3
最短路径
11
4
7
A1
4
2
6
11
47
3 2
Q
A2
4
B1
1
4 76
3
C1
3
B2 3
最新版整理ppt
16
(4)策略和允许策略集合
策略(Policy)也叫决策序列.策略有全过程 策略和 k 部子策略之分,全过程策略是指具 有n 个阶段的全部过程,由依次进行的 n 个 阶段决策构成的决策序列,简称策略,表示
为 p1,n{x1,x2, ,xn}。从 k 阶段到第 n 阶段,
依次进行的阶段决策构成的决策序列称为 k
新分支的创立。
最新版整理ppt
6
• 动态规划将复杂的多阶段决策问题分解为 一系列简单的、离散的单阶段决策问题, 采用顺序求解方法, 通过解一系列小问题 达到求解整个问题目的;
• 动态规划的各个决策阶段不但要考虑本阶 段的决策目标, 还要兼顾整个决策过程的 整体目标, 从而实现整体最优决策.
最新版整理ppt
第七章 动态规划
主要内容:
§7.1多阶段决策问题 §7.2 动态规划的基本概念和基本原理 §7.3 动态规划应用举例
最新版整理ppt
1
例 求解最短路问题
2
Q
4
第七章 动态规划h 运筹学 ppt课件
5 B1 4
2 A1
3
7
B2
6 5
3
2 B3 2
各阶段状态集合分别为:
C1 2 5 6
C2 3 2
C3 1
C4 7
D3
1
E 5 D
2
S1={A}
S2={B1,B2,B3}
S3={C1,C2,C3,C4} S4={D1,D2}
状态的选取应当满足无后效性:系统从某个阶段往后的发
展演变,完全由系统本阶段所处的状态及决策所决定,与
从B2出发,可以选择C1,C2,C3,C4,即允许决策集合为: D2(B2)={C1,C2,C3,C4} 当决定选择C3时,可以表示为:u2(B2)=C3
4.策略(policy)
当各个阶段的决策确定以后,各阶段的决策形成一个决 策序列,称此决策序列为一个策略.
使系统达到最优效果的策略称为最优策略。
2 A1
3
5 B1 4
7
B2
6 5
3
2 B3 2
C1 2 5 6
C2 3 2
C3 1
C4 7
状态转移方程为:sk+1= uk(sk)
D3
1
E 5 D
2
6.指标函数和最优指标函数 衡量所选策略优劣的数量指标称为指标函数。它定义在全 过程和所有后部子过程,常用Vk,n表示,即: Vk,n=Vk,n(sk,uk,sk+1,…,sn+1) 当k=1时,V1,n表示初始状态为s1,采用策略p1,n时的指标 函数值。 V1,n=V1,n(s1,u1,s2,…,sn+1)
3 D1 3
0
55
E
D2
从前向后标号:
02
《动态规划》课件
动态规划具有最优子结构和重叠子问题的特点,能够通过保存已解决的子问题来避免重复计 算。
应用场景
动态规划广泛应用于路线规划、资源分配、序列匹配等问题,能够有效地解决复杂的优化和 决策问题。
动态规划的优缺点
1 优点
动态规划能够提供最优的解决方案,同时能够高效地解决问题,避免重复计算。
2 缺点
使用动态规划解决问题需要设计状态转移方程,对于复杂问题可能需要较高的思维和计 算复杂度。
《动态规划》PPT课件
欢迎来到《动态规划》PPT课件! 本课程将深入探讨动态规划的应用和技巧, 帮助你理解这一强大的问题求解方法。
什么是动态规划
动态规划是一种通过将问题拆分为更小的子问题,并根据子问题的解来求解 原问题的方法。它可以应用于许多领域,包括优化、组合数学和图论。动态规划的特点 Nhomakorabea应用场景
参考资料
• 经典教材 • 学术论文 • 网络资源
确定问题的初始状态和结束条件,作为动态规划的边界。
4
确定优化方向
选择最优的状态转移路径,以达到问题的最优解。
经典问题解析
斐波那契数列
通过动态规划求解斐波那契数列,可以有效 地避免重复计算,提高计算效率。
最长公共子序列
使用动态规划求解最长公共子序列,可以在 时间复杂度为O(n*m)的情况下找到最长公共 子序列。
最优子结构
定义
最优子结构表示一个问题的最优解可以通过子 问题的最优解来构建。
举例
在路径规划问题中,通过求解子问题的最短路 径,可以获得整个路径规划的最短路径。
重叠子问题
定义
重叠子问题表示一个问题的子问题会被重复计 算多次。
举例
在斐波那契数列中,计算每个数字需要依赖于 前两个数字,导致重复计算了相同的子问题。
《动态规划算法》课件
多阶段决策优化
详细描述
背包问题是一个经典的动态规划问题,通过将问题分解 为多个阶段,并为每个阶段定义状态和状态转移方程, 我们可以找到最优解。在背包问题中,我们使用一个二 维数组来存储每个状态的最优解,并逐步更新状态以找 到最终的最优解。
最长公共子序列求解
总结词
字符串匹配优化
详细描述
最长公共子序列问题是一个经典的动态规划问题,用 于找到两个序列的最长公共子序列。通过动态规划, 我们可以避免在寻找公共子序列时进行冗余比较,从 而提高算法效率。在动态规划中,我们使用一个二维 数组来存储子问题的最优解,并逐步构建最终的最长 公共子序列。
动态规划的基本思想
01
将问题分解为子问 题
将原始问题分解为若干个子问题 ,子问题的解可以构成原问题的 解。
02
保存已解决的子问 题
将已解决的子问题的解保存起来 ,以便在求解其他子问题时重复 使用。
03
递推求解
从子问题的解逐步推导出原问题 的解,通常采用自底向上的方式 求解。
02
动态规划算法的步骤
可并行化
动态规划算法可以并行化执行,以提高计算效率,这对于 大规模问题的求解非常有利。
缺点
• 空间复杂度高:动态规划算法需要存储大量的中间状态,因此其空间复杂度通常较高,有时甚至会超过问题规 模的一个指数倍。
• 问题规模限制:由于动态规划算法的空间复杂度较高,因此对于大规模问题的求解可能会遇到困难。 • 可能产生大量重复计算:在动态规划算法中,对于每个子问题,可能会被多次计算和存储,这会导致大量的重复计算和存储空间浪费。 • 不易发现:动态规划算法的应用范围有限,对于一些非最优子结构问题或没有重叠子问题的优化问题,动态规划算法可能不适用。因此,在解决问题时需要仔细分析问题特性,判断是
《算法设计与分析》第07章
算法的时间复杂度 若G采用邻接表表示,总计算时间为:
3. 向后处理策略求解
设 BP(i,j)是一条从源点s到Vi中的结点j的最小成本路径, BCOST(i,j)是这条路径的成本。
1) 向后递推式
BCOST(k,t)=0
2) 递推过程
★ 第2段 c(1,j) COST(2,j) = ∞ <1,j>∈E
7.1.1 一般方法
最优性原理指出,一个最优策略具有这样的性 质,不论过去状态和决策如何,对前面的决策所 形成的状态而言,其余决策必定构成最优策略。 这便是最优决策序列的最优子结构特性。
利用动态规划求解问题的前提: 1) 证明问题满足最优性原理 如果对所求解问题证明满足最优性原理,则 说明用动态规划方法有可能解决该问题 2) 获得问题状态的递推关系式 获得各阶段间的递推关系式是解决问题的关 键。
根据D(5,12)的决策值向前递推求取最小成本路径: ● v4 = BD(5,12)=10 ● v3 = BD(4,BD(5,12)) = 7 ● v2 = BD(3,BD(4,BD(5,12))) = BD(3,7) = 2 故由s到t的最小成本路径是:1→2→7→10→12
7.1.4 资源分配问题
【程序7-1】多段图的向前递推算法 template<class T> void Graph<T>::FMultiGraph(int k,int *p) {//采用程序6-8的邻接表存储图G。 float *cost=new float[n]; int q,*d=new int[n]; cost[n-1]=0,d[n-1]=-1;
for (int j=n-2;j>=0;j--){ float min=INFTY; for (ENode<T> *r=a[j];r;r=r->nextArc) { int v=r->adjVex; if (r->w+cost[v]<min) { min=r->w+cost[v];q=v; } } cost[j]=min;d[j]=q; } p[0]=0;p[k-1]=n-1; for(j=1;j<=k-2;j++) p[j]=d[p[j-1]]; delete []cost;delete []d; }
《算法设计与分析》课件
本课程将介绍算法的设计与分析,包括排序算法、查找算法和动态规划算法。 通过掌握这些算法,您将能够解决各种复杂的问题。
课程介绍
课程目标和内容概述
掌握算法设计与分析的基本概念和方法,学 习不同类型的算法及其应用。
教学方法和要求
通过理论讲解、案例分析和实际编程练习, 提高算法设计与分析的能力。
2 背包问题的动态规划解法
学习如何使用动态规划算法解决背包问题,掌握求解最优解的方法。
总结和课程评价
总结
回顾本课程涉及的算法内容,并思考所学知识 的实际应用。
课程评价
对本课程的内容、教学方法和教师的表现进行 评价和反馈。
算法基础
1 算法概述和分类
了解算法的定义、特性和常见的分类方法,为后续学习打下基础。
2 时间复杂度和空间复杂度
学习如何评估算法的时间和空间效率,并选择最合适的算法。
排序算法
1
插入排序
2
学习插排序算法的思想和实现过程,
掌握其时间复杂度和适用范围。
3
冒泡排序
掌握冒泡排序算法的原理和实现方法, 了解其时间复杂度和应用场景。
快速排序
了解快速排序算法的原理和分治思想, 学会如何选择合适的划分策略。
查找算法
顺序查找
掌握顺序查找算法的基本思想和实现过程,了 解其时间复杂度和使用场景。
二分查找
学习二分查找算法的原理和应用,了解其时间 复杂度和适用条件。
动态规划算法
1 原理和应用举例
了解动态规划算法的核心原理,并通过实例了解其在解决复杂问题时的应用。
算法设计与分析讲义动态规划
要点三
《算法之美》
以通俗易懂的语言介绍了算法的基本 概念和方法,包括动态规划算法的应 用案例。
THANKS
谢谢您的观看
详细描述
记忆化搜索优化方法是将问题的搜索过程记忆下来,当再次遇到同样的问题 时,直接从记忆中获取答案,避免重复的搜索过程。这种优化方法适用于具 有重复子问题的搜索问题。
自顶向下的优化方法
总结词
通过从问题的顶层开始,逐步向下解决问题,从而避免冗余的计算。
详细描述
自顶向下的优化方法是从问题的最高层开始,逐步向下解决问题。通过将问题分 解为多个子问题,并且只解决一次子问题,避免冗余的计算,从而提高效率。
算法设计与分析讲义动态规划
xx年xx月xx日
目 录
• 动态规划概述 • 动态规划的基本原理 • 动态规划的应用实例 • 动态规划的优化方法 • 动态规划的拓展学习 • 参考2
定义:动态规划是一种 通过将问题分解为相互 重叠的子问题来解决问 题的方法。在算法设计 中,动态规划通常用于 优化递归问题,避免重 复计算相同的子问题, 从而节省计算时间和空 间。
高级动态规划算法的优化
针对具体问题,采用更高级的动态规划算法,如最长公共子序列(LCS)、最长递增子序列(LIS)等。
自顶向下的动态规划
将问题分解为子问题,从高级到低级逐步解决问题,避免冗余计算。
分布式动态规划
01
02
03
分布式计算环境
通信开销
全局状态
将问题分解成多个子问题,在不 同的计算节点上并行解决。
02
03
数据挖掘
在数据挖掘中,使用动态规划算法发 现频繁子集、关联规则等数据模式, 帮助企业进行数据分析和决策。
06
算法分析与设计课件:动态规划法
动态规划问世以来,在经济管理、生产调度、 工程技术和最优控制等方面得到了广泛的应用。 例如最短路线、资源分配、设备更新等问题, 用动态规划比用其它方法求解更为方便。
2022/2/14
4 of 158
方法概述: 发展及研究内容
虽然动态规划主要用于求解以时间划分阶段的 动态过程的优化问题,但是一些与时间无关的 静态规划(如线性规划、非线性规划),可以人为 地引进时间因素,把它视为多阶段决策过程, 也可以用动态规划方法方便地求解。
2022/2/14
5 of 158
方法概述: 基本思想
Bellman给出这个原理作为动态规划的适用条 件,后来Morin在1982年证明了这只是一个充 分条件而非必要条件。Bellman的原定义如下:
An optimal policy has the property that whatever the initial state and initial decision are, then remaining decisions must constitute an optimal policy with regard to the state resulting from first decision.
时再查找,这样就可以避免重复计算、节省时
间。动态规划法用一个表来记录所有已解的子
问题的答案。 2022/2/14
6 of 158
方法概述: 求解步骤
1、找出最优解的性质,并刻画其结构特征; 2、递归地定义最优值(写出动态规划方程); 3、以自底向上的方式计算出最优值; 4、根据计算最优值时记录的信息,构造最优解。 注: -步骤1-3是动态规划算法的基本步骤。在只需要
算法设计与分析:第7章 动态规划法
}
程序7-1:多段图的向前递推动态规划算法
FMultiGraph(int k,int*p) //共k个阶段,n个结点
{ //带权有向图G (多段图)采用邻接表存储(见程序6-8)
float *cost=new float[n]; int *d=new int[n]; cost[n-1]=0;d[n-1]=-1;
由每个阶段所作出的决策组成的决策序列,产生一 条从s到t的路径——多段图问题的一个可行解。
目标函数(每条路径上所有边的权值之和,即路径
长度)最小的一条路径为最优解,该路径长度为最
优解值。
ch7.14
多段图的最优子结构证明
假设(s,v2,v3,...,vk-1,t)是一条从s到t的最短路径,并 假定由源点s经过初始决策已经到达状态v2 。则将 v2看成某个子问题的初始状态,该子问题寻找一条 从v2到t的最短路径。
ch7.19
程序7-1:多段图的向前递推动态规划算法
FMultiGraph(int k,int*p) //共k个阶段,n个结点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与技术学院
通过应用范例学习动态规划算法设计策略。
(1)矩阵连乘问题; (2)最长公共子序列; (3)0/1背包问题; (4)流水作业调度;
第七章 动态规划法
是另一种求解最优化问题的算法设计策略 适合求解的问题(多阶段决策问题):
问题的活动过程可以分成若干个阶段,每个阶段包含一 个或多个状态,在任一阶段的决策仅依赖与该阶段的状 态,与该阶段之前的过程如何达到这种状态的方式无关, 这类问题的解决是多阶段的决策过程.
}
7.3 矩阵连乘
穷举法 动态规划法
分析最优解的结构 递归定义最优解的值 自底向上计算最优解的值
对于1≤i≤j≤n不同的有序对(i,j)对应于不同的子问题。因此,不同
子 在递问归题计的算个时数,最许多多只有子问题n2被 重n 复 计(n算2)。多次。这也是该问题可用动
m[4][m5][=3]m[4[4]+][m4][+5]m[5[5]+][5P]3+P5PP46P=5P56*=1100**2200=*12050=05}000
m=
0 15750 7875 9735 11875 15125
0 2625 4375 712510500
0 750 2500 5375 0 1000 3500
所以,不能在某个阶段直接做出决策
再看一例:
最优子结构:
如果ABEG是A 到G的最短路径,那 么ABE也是A到E的 最短路径。
第七章 动态规划法
例2.数塔问题:设有一个三角形数塔,求一自塔顶到塔底的 路径,且该路径上结点的值的和最大.择12方向还是选择 15方向,取决于分别从12和15出发的两 条子路径上的最大路径值,设他们分别
当i=j时,A[i:j]=Ai,因此,m[i,i]=0,i=1,2,…,n 当i<j时,假设在Ak 和Ak+1之间分开,则
m[i, j] m[i, k] m[k 1, j] pi pk1 p j1
这里 Ai 的维数为 pi1 pi
m[i,
j]
mikin j{m[i,
例7-5:求A0A1A2A3A4A5的积,其中A0:30*35, A1:35*
15 ,A2:15*5 ,A3:5*10 ,A4:10*20 ,A5:20*25
解:P:
m[i, j] m[i, k] m[k 1, j] pi pk1 p j1
30 35 15 5 10 20 25
计算顺序:
令m数组的主对角线上的元素m[i][i]=0, s[i][j]=i(0<=i<n) 然后从主对角线上一条次对角线开始,依次计算m的n-2条对角线元素,
并在s[i][j]中记录使得下式取得最小值的k.
m[i, j] m[i, k] m[k 1, j] pi pk1 p j1
态规划算法求解的又一显著特征。
用动态规划算法解此问题,可依据其递归式以自底向上的方式进行 计算。在计算过程中,保存已解决的子问题答案。每个子问题只计 算一次,而在后面需要时只要简单查一下,从而避免大量的重复计 算,最终得到多项式时间的算法。
7.4 最长公共子序列
算法总体思想
如果能够保存已解决的子问题的答案,而在需要时再 找出已求得的答案,就可以避免大量重复计算,从而 得到多项式时间算法。
=n T(n)
n/2
n/2
n/2
n/2
T(n/4) T(n/4)
T(n/4) T(n/4) T(n/4) T(n/4) T(n/4) T(n/4) T(n/4) T(n/4) T(n/4)
7.3 矩阵连乘
问题描述
给定n个矩阵 {A0 , A1,..., An1} ,其中 Ai 与 Ai1 是可乘的, 其中 i 0,1,2,...,n 1.考察这n个矩阵的连乘积 A0 A1... An1 矩阵连乘问题:是确定计算矩阵连乘积的计算次序,使得 依此次序计算矩阵连乘积,需要的数乘次数最少。
T(n)
=n
T(n/2)
T(n/2)
T(n/2)
T(n/2)
算法总体思想
但是经分解得到的子问题往往不是互相独立的。不同子 问题的数目常常只有多项式量级。在用分治法求解时, 有些子问题被重复计算了许多次。
T(n)
=
n
n/2
n/2
n/2
n/2
T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4)
for (int i = 1; i <= n - r+1; i++) { int j=i+r-1; m[i][j] = m[i+1][j]+ p[i-1]*p[i]*p[j]; s[i][j] = i;
算法matrixChain的主要计算量 取决于算法中对r,i和k的3重循 环。循环体内的计算量为O(1), 而3重循环的总次数为O(n3)。因 此算法的计算时间上界为O(n3)。 算法所占用的空间显然为O(n2)。
动态规划基本步骤
找出最优解的性质,并刻划其结构特征。 递归地定义最优值。 以自底向上的方式计算出最优值。 根据计算最优值时得到的信息,构造最
优解。
7.3 矩阵连乘
相关知识回顾
矩阵相乘的运算量(数乘次数) 设有矩阵Amxn 和Bnxp,则A和B是可乘的,乘积矩阵 Dmxp=Amxn XBnxp. 它的元素
0 5000
0
0 00 2 22 11 2 22
22 22 s=
334 44 5
用动态规划法求最优解
void MatrixChain(int *p,int n,int **m,int **s)
算法复杂度分析:
{
for (int i = 1; i <= n; i++) m[i][i] = 0; for (int r = 2; r <= n; r++)
int MatrixChain::LookupChain(int i, int j)
{
if (m[i][j]>0) return m[i][j];//子问题已经求解,直接引用
if(i==j) return 0;
//单一矩阵无须计算
int u=LookupChain(i+1, j)+p[i]*p[i+1]*p[j+1];//按式(7-9)求最小值
s[i][j]=i;
for (int k=i+1; k<j; k++)
{ int t=LookupChain(i, k)+LookupChain(k+1, j)+p[i]*p[k+1]*p[j+1];
if (t<u)
{ u=t; s[i][j]=k; }
}
m[i][j]=u; return u;
//保存并返回子最优解值
m…[..1][3]=mmmin[[21{]][[mm23]][[==11]]mm[[12[[]21]++]][[mm12]][[++23]]mm[[33[[]23]++]][[PP3211]]PP++23PPPP4412==PP2373PP55340*==+1315355*5**5*15=15*52*1*60512==0527=65}2206525 m[3][5]=mmin[3{]m[4[]3=]m[3[]3+]m[3[]4+]m[5[]4+]P[43P]+4PP63=P54P*51=05**2100=*12000=01000
最优化原理: 一个最优策略具有这样的性质:不论过去状态和决策如 何,对前面的决策所形成的状态而言,其余决策都必须 相对于初始决策所产生的状态构成一个最优决策序列.
第七章 动态规划法
如:修大学课程 对于一个多阶段过程问题,上述最优决策序列是否存
在,依赖于该问题的解是否具有最优子结构性质,而能否 采用动态规划法,还要看该问题的子问题是否具有重叠性质. 基本要素 最优子结构特性:
矩阵连乘的计算次序可以用完全加括号的形式来表示
7.3 矩阵连乘
相关知识回顾
矩阵相乘的运算量(数乘次数) 矩阵连乘的运算量与矩阵的计算次序有关 完全加括号的递归定义
单个矩阵是完全加括号的 矩阵连乘积A是完全加括号的,则A可表示为两个完全加 括号的矩阵连乘积B和C的乘积并加括号,即A=(BC)
A[i:j]的计算量=A[i:k]的计算量+A[k+1:j]的计算量 +A[i:k]和A[k+1:j]相乘的计算量。 分析最优解的结构
特征:计算A[i:j]的最优次序所包含的计算矩阵子链 A[i:k]和A[k+1:j]的次序也是最优的。
7.3 矩阵连乘
递归定义最优解的值
设计算A[i:j],1≤i≤j≤n,所需要的最少数乘次数 m[i,j],则原问题的最优值为m[1,n] 。
10 6 8
为x和y,
若x>y 9->12 最大路径为9+x
2 18 9 5
否则,9->15 最大路径为9+y
若9->12,则使用类似方法讨论10和6
19 7 10 4 16
当讨论进行到倒数第2层时,直接进行 选择
求解(自底向上)
算法总体思想
动态规划算法与分治法类似,其基本思想也是将待求解 问题分解成若干个子问题
P(n)
n 1
P(k