第三章动态规划算法1PPT

合集下载

动态规划算法教学PPT

动态规划算法教学PPT

03
动态规划算法的实现步骤
明确问题,建立数学模型
1
确定问题的目标和约束条件,将其转化为数学模 型。
2
理解问题的阶段划分,将问题分解为若干个子问 题。
3
确定状态变量和决策变量,以便描述子问题的状 态和决策。
划分阶段,确定状态变量和决策变量
01
根据问题的阶段划分,将问题分解为若干个子问题。
02
确定状态变量和决策变量,以便描述子问题的状态 和决策。
02
将子问题的最优解组合起来,得到原问题的最优解。
对最优解进行验证和性能评估,确保其满足问题的要求。
03
04
动态规划算法的优化技巧
分支定界法
分支定界法是一种求解优化问题的算 法,它通过不断生成问题的分支并确 定每个分支的界限,来寻找最优解。 在动态规划中,分支定界法可以用来 优化状态转移方程,减少计算量。
详细描述
多目标规划问题在实际生活中应用广泛,如资源分配、项目计划、城市规划等领 域都有涉及。常用的求解多目标规划的方法包括权重和法、帕累托最优解等。
多阶段决策问题
总结词
多阶段决策问题是动态规划中的一类,解决的问题需要在多个阶段做出决策,每个阶段的决策都会影响到后续阶 段的决策。
详细描述
多阶段决策问题在实际生活中应用广泛,如生产计划、库存管理、路径规划等领域都有涉及。常用的求解多阶段 决策问题的方法包括递归法、动态规划等。
特点
动态规划算法具有最优子结构、重叠 子问题和最优解性质等特征。
动态规划算法的应用领域
计算机科学
在计算机科学中,动态规划算法广泛应用于字符 串处理、排序、数据压缩和机器学习等领域。
电子工程
在电子工程中,动态规划算法用于信号处理、通 信和控制系统等领域。

动态规划ppt课件

动态规划ppt课件
再如
当硬币系统为4分、3分、1分时,要找给顾客6分钱, 怎么做?
一般思维:6 = 1个4分 + 2个1分 2个3分才是最优解!
6
Example: Counting Coins. Find the minimum number of coins (1¢, 3¢, and 4¢) to make any amount. For 6¢:
fibonacci(4) = fibonacci(3) + fibonacci(2)
如果能够记录已解决的子问题的答案,而在需要 时再找出,就可以避免大量重复计算。
表格式方法
10
矩阵连乘 (matrix-chain multiplication)
给定n个矩阵{A1,A2,…,An},其中,Ai和Ai+1是可 乘的,现要计算出这n个矩阵的连乘积A1A2,…,An。
4
基本思想
动态规划策略通常用于求解具有某种最优性质的 问题。
在这类问题中,可能会有许多可行解。每一个解都对 应于一个值,我们希望找到具有最优值(最大值或最 小值)的那个解。
动态Dynamic
在一定条件下,当前阶段和下一阶段的状态的转换。
规划Programming
建立状态转移方程(或称各阶段间的递推关系式)、 将各个阶段的状态以表格式方法存储。
子问题的最优解逐步构造出原问题的最优解。
重叠子问题(overlapping subproblem)
有些子问题被反复计算多次(前一阶段的状态 带到当前阶段,当前阶段的状态带到下一阶 段)。
8
最优子结构/最优化原理
最优策略的子策略也是最优策略
原问题的最优解不一定组成原问题的最优解

2019年动态规划算法.ppt

2019年动态规划算法.ppt

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)
2019/4/27
4
算法总体思想
如果能够保存已解决的子问题的答案, 而在需要时再 找出已求得的答案, 就可以避免大量重复计算, 从而 得到多项式时间算法.
2019/4/27
13
Algorithm 7.1 LCS Input: Two strings A and B of length n and m, respectively, over an
alphabet Output: The length of the longest common subsequence of A and B
蛮力法: 列举A所以的2n个子序列, 对于每一子序 列在(m)时间内来确定它是否也是B的子序列.
很明显, 此算法的时间复杂的为(m*2n).
2019/4/27
10
递推公式
为了使用动态规划技术, 首先推导一个求最长公 共子序列长度的递推公式. 令A=a1a2...an和B=b1b2...bm 令L[i, j]表示a1a2...ai和b1b2...bj的最长公共子 序列的长度(i, j可能是0, 此时a1a2...ai和 b1b2...bj中至少一个为空). 可得如下结论:
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) STe(nn/s4e) (19T0(5n)/4)

《动态规划课件》课件

《动态规划课件》课件

应用场景:求解最短路径、背 包问题等
注意事项:避免重复计算子问 题和记忆化搜索
定义:将问题划分为 若干个较小的子问题, 并逐个解决子问题, 最终得到原问题的解
特点:将原问题分解为 更小的子问题,通过求 解子问题的最优解得到 原问题的最优解
应用场景:适用于 具有重叠子问题和 最优子结构特性的 问题
示例:背包问题、 最大子段和问题等
分段算法的代码 实现
分段算法的时间 复杂度分析
避免重复计算:使用备忘录或动态规划表来记录已计算过的子问题 减少子问题的数量:通过合并或减少不必要的子问题来降低计算复杂度 选择合适的递归方式:根据问题的特点选择最优的递归方式 优化递归栈:通过减少递归深度或使用循环代替递归来提高性能
优化算法:动态规划可以优化算法,提高计算效率 避免重复计算:通过记忆化搜索,避免重复计算,提高计算速度
添加标题ቤተ መጻሕፍቲ ባይዱ
添加标题
添加标题
添加标题
动态规划与分治法比较:分治法将 问题分解为子问题,而动态规划将 子问题联系起来
动态规划与回溯法比较:回溯法会 穷举所有可能解,而动态规划可以 避免不必要的搜索
机器学习与深度 学习中的动态规 划
自然语言处理中 的动态规划
计算机视觉中的 动态规划
推荐系统中的动 态规划
最大子段和问题的定义 最大子段和问题的应用场景 最大子段和问题的解决方法 最大子段和问题的实际应用案例
定义:矩阵链乘法问题是一种优化问题,通过动态规划算法来求解
应用场景:在科学计算、机器学习、图像处理等领域都有广泛的应用
算法原理:通过动态规划算法,将矩阵链乘法问题转化为子问题,从而避免重复计算,提高 计算效率
应用场景:背包问题在计算机科学、运筹学、经济学等领域都有广泛的应用,如资源分配、路径规划、时间表安 排等。

动态规划 PPT课件

动态规划 PPT课件
5
常用算法与程序设计
3. 最优性原理
最优性原理:“作为整个过程的最优策略具有这样的 性质,无论过去的状态和决策如何,对前面的决策所形成 的状态而言,余下的诸决策必须构成最优策略”。 也就是说,最优决策序列中的任何子序列都是最优的。 最优性原理体现为问题的最优子结构特性。当一个问 题的最优解中包含了子问题的最优解时,则称该问题具 有最优子结构特性。 最优子结构特性是动态规划求解问题的必要条件。
cij ai1 b1 j ai 2 b2 j ain bnj a ik bkj k 1 cmp am1b1 p am 2 b2 p amn bnp a mk12 bkp 返回
Visual FoxPro
k 1 n k 1 n
k 1 n
常用算法与程序设计
3
常用算法与程序设计
2一般方法
多阶段决策问题 多阶段决策过程的每一阶段可能有多种可供 选择的决策,必须从中选择一种决策。各阶 段的决策构成一个决策序列。决策序列不同, 所导致的问题的结果可能不同。 多阶段决策的最优化问题就是:求能够获得 问题最优解的决策序列——最优决策序列。
4
常用算法 a11 b11 a12b21 a1n bn1 a1k bk 1
c1 j a11 b1 j a12b2 j a1n bnj a1k bkj
k 1 n
n
ci1 ai1 b11 ai 2 b21 ain bn1 a ik bk 1
给定n个矩阵{A0,A1,…,An-1}, 其中Ai
, i=0,…,n-1 的 维 数为 pipi+1 ,并且 Ai 与 Ai+1 是可乘的。考察这 n个矩阵的连 乘积 A0A1…An1 ,由于矩阵乘法满足

《计算机算法设计与分析》第三章动态规划法

《计算机算法设计与分析》第三章动态规划法
解决复杂问题 动态规划可以将复杂问题分解为简单的子问题, 通过逐步求解子问题来得到原问题的解,使得复 杂问题得以解决。
发展历程及现状
发展历程
动态规划的思想起源于20世纪50年代,由美国数学家Richard Bellman提出。随着计 算机科学的发展,动态规划在算法设计和分析领域得到了广泛应用和深入研究。
第六章
总结与展望
动态规划法在计算机科学中重要性
高效求解最优化问题
动态规划法通过把原问题分解为相对简单的子问题,并保存子问题的解,避免了大量重复计算,从而高效地求解最优化问题。
广泛应用
动态规划法在计算机科学、经济学、生物信息学等领域都有广泛应用,如背包问题、最短路径问题、序列比对问题等。
提供算法设计框架 动态规划法不仅为解决特定问题提供了有效方法,而且为算法设计提供了一个通用框架,有助于理解和设 计更复杂的算法。
现状
目前,动态规划已经成为计算机算法设计和分析领域的重要工具之一。在实际应用 中,许多复杂的问题都可以通过动态规划的方法得到有效的解决。同时,随着计算 机技术的不断发展,动态规划的应用领域也在不断扩展。
第二章
动态规划法基本原理
最优子结构性质
在动态规划法中, 子问题之间是相互 独立的,即一个子 问题的求解不会影 响到其他子问题的 求解。这使得动态 规划法能够避免重 复计算,提高算法 效率。
学习相关算法和技术
学习与动态规划法相关的其他算法 和技术,如贪心算法、分治法等, 以便在实际问题中灵活应用。
关注最新研究进展
关注计算机科学和算法设计领域的 最新研究进展,了解动态规划法的 新发展和应用,保持对新技术的敏 感性和好奇心。
THANKS
感谢观看
基本思想

2019年第3章动态规划.ppt

2019年第3章动态规划.ppt

s[i][j] = i; for (int k = i+1; k < j; k++) {
i和k的3重循环。循环体内的计算量为O(1),而3重 循环的总次数为O(n3)。因此算法的计算时间上界 为O(n3)。算法所占用的空间显然为O(n2)。
int t = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];
3
算法总体思想
• 但是经分解得到的子问题往往不是互相独立的。不同 子问题的数目常常只有多项式量级。在用分治法求解 时,有些子问题被重复计算了许多次。
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(4n/4)T(n/4
穷举法:列举出所有可能的计算次序,并计算出每一种计 算次序相应需要的数乘次数,从中找出一种数乘次数最少的 计算次序。
算法复杂度分析:
对于n个矩阵的连乘积,设其不同的计算次序为P(n)。
由于每种加括号方式都可以分解为两个子矩阵的加括号问题:
(A1...Ak)(Ak+1…An)可以得到关于P(n)的递推式如下:
第3章 动态规划
1
• 动态规划算法与分治法类似,其基本思想也是将待求 解问题分解成若干个子问题
T(n)
=n
T(n/2)
T(n/2)
T(n/2)
T(n/2)
2
算法总体思想
• 动态规划算法与分治法类似,其基本思想也是将待求 解问题分解成若干个子问题

《动态规划算法》课件

《动态规划算法》课件
总结词
多阶段决策优化
详细描述
背包问题是一个经典的动态规划问题,通过将问题分解 为多个阶段,并为每个阶段定义状态和状态转移方程, 我们可以找到最优解。在背包问题中,我们使用一个二 维数组来存储每个状态的最优解,并逐步更新状态以找 到最终的最优解。
最长公共子序列求解
总结词
字符串匹配优化
详细描述
最长公共子序列问题是一个经典的动态规划问题,用 于找到两个序列的最长公共子序列。通过动态规划, 我们可以避免在寻找公共子序列时进行冗余比较,从 而提高算法效率。在动态规划中,我们使用一个二维 数组来存储子问题的最优解,并逐步构建最终的最长 公共子序列。
动态规划的基本思想
01
将问题分解为子问 题
将原始问题分解为若干个子问题 ,子问题的解可以构成原问题的 解。
02
保存已解决的子问 题
将已解决的子问题的解保存起来 ,以便在求解其他子问题时重复 使用。
03
递推求解
从子问题的解逐步推导出原问题 的解,通常采用自底向上的方式 求解。
02
动态规划算法的步骤
可并行化
动态规划算法可以并行化执行,以提高计算效率,这对于 大规模问题的求解非常有利。
缺点
• 空间复杂度高:动态规划算法需要存储大量的中间状态,因此其空间复杂度通常较高,有时甚至会超过问题规 模的一个指数倍。
• 问题规模限制:由于动态规划算法的空间复杂度较高,因此对于大规模问题的求解可能会遇到困难。 • 可能产生大量重复计算:在动态规划算法中,对于每个子问题,可能会被多次计算和存储,这会导致大量的重复计算和存储空间浪费。 • 不易发现:动态规划算法的应用范围有限,对于一些非最优子结构问题或没有重叠子问题的优化问题,动态规划算法可能不适用。因此,在解决问题时需要仔细分析问题特性,判断是

动态规划算法教学PPT

动态规划算法教学PPT

2013-8-23
作业三:求这个区域的 最长滑坡。 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 19
最大子段和:数列一段的和
N M 7 7 -1 6 2 -13 8 -5 6 6 -5 1 6 7 7 -1
14 13
2013-8-23
12
数塔问题
有形如下图所示的数塔,从顶部出发,在每 一结点可以选择向左下走或是向右下走,一直走 到底层,要求找出一条路径,使路径上的值最大 。
2013-8-23
13
考虑一下:
从顶点出发时到底向左走还是向右 走应取决于是从左走能取到最大值还是 从右走能取到最大值,只要左右两道路 径上的最大值求出来了才能作出决策。 同样,下一层的走向又要取决于再 下一层上的最大值是否已经求出才能决 策。这样一层一层推下去,直到倒数第 二层时就非常明了。 如数字2,只要选择它下面较大值 的结点19前进就可以了。所以实际求解 时,可从底层开始,层层递进,最后得 到最大值。
分别标记出每个 结点到D点的最短 路径
再一例:最短路径
பைடு நூலகம்
动态规划的基本步骤(完整)(选)
(1)【理解题目】找出最优解的性质,并刻画其结构特征。 (2)【状态之间的关系】递归地定义最优值。 (3)【规划的步骤和方式】以自底向上的方式计算出最优值。 理论上自底向上,形式上可有所变化。 (4)【规划的详细过程再现】根据计算最优值时得到的信息,构造 一个最优解。一般需要一个辅助的数组,保存状态之间的变迁线路。 说明: 其中(1)-(3)步是动态规划算法的基本步骤。在只需要求出 最优值的情形,步骤(4)可以省去。 若需要求出问题的一个最优解,则必须执行步骤(4)。此时,在 步骤(3)中计算最优值时,通常需记录更多的信息,以便在步骤 (4)中,根据所记录的信息,快速构造出一个最优解。

算法设计与分析_第3章_动态规划1

算法设计与分析_第3章_动态规划1
8
引言
分治技术的问题
子问题是相互独立的
Why?
问题:
如果子问题不是相互独立的,分治方法将重复 计算公共子问题,效率很低,甚至在多项式量 级的子问题数目时也可能耗费指数时间
解决方案:动态规划
用表来保存所有已解决子问题的答案 不同算法的填表格式是相同的
9
引言
最优化问题
Why?
可能有多个可行解,每个解对应一个 值,需要找出最优值的解。
MATRIX-MULTIPLY(A, B) 1 if columns[A] ≠ rows[B] 2 then return “error: incompatible dimensions” 3 else for i ← 1 to rows[A] 4 for j ← 1 to columns[B] 5 C[i, j] ← 0 6 for k ← 1 to columns[A] 7 C[i, j]←C[i, j]+A[i, k]·B[k, j] 8 return C
(A1 (A2 (A3 A4))) , (A1 ((A2 A3) A4)) , ((A1 A2) (A3 A4)) , ((A1 (A2 A3)) A4) , (((A1 A2) A3) A4).
15
矩阵连乘问题
采用不同的加括号方式,可导致不同的、 甚至及其富有戏剧性差别的乘法开销
设有四个矩阵A,B,C,D,它们的维数分别 是: A=50×10 B=10×40 C=40×30 D=30×5 总共有五种完全加括号的方式: (A((BC)D)) ——16000 (A(B(CD))) ——10500 ((AB)(CD)) ——36000 (((AB)C)D) ——87500 ((A(BC))D) ——34500
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法设计与分析 2
不同计算顺序的数量
设n个矩阵的连乘积有P(n)个不同的计算顺序。 由此可得出关于 先在第k个和第k+1 P(n) 个矩阵之间将原矩阵序列 的递归式: 分成两个矩阵子序列, k=1,…, n;再分别 1 n= 1 n–1 P(n) = 对两个子序列完全加括号,最后对结果加括 ∑P(k) P(n–k) n>1 k=1 号,便得到原序列的一种完全加括号方式。 解此递归方程可得P(n) = C(n–1),其中 1 2n n/n3/2) C(n) = n+1 = Ω(4 n 所以P(n)随n的增长呈指数增长。因而穷举搜 索法不是有效的算法。
算法设计与分析 4源自立递归关系令m[i][j] , 1≤i, j≤n,为计算A[i, j] 的最少数乘 次数,则原问题为m[1][n]。 当i = j时,A[i, j]为单一矩阵, m[i][j] = 0; 当i<j时,利用最优子结构性质有: m[i][j] = min{m[i][k] + m[k+1][j] + pi–1pkpj}
3 3
s[i][j]
3 5 4
5
算法设计与分析
11
MatrixChain的时间复杂性
算法MatrixChain的主要计算取决于程序 中对r、i和k的三重循环。循环体内的计 算量为O(1),1≤ r、i、k≤n,三重循环的 总次数为O(n3)。因此该算法时间复杂性 的上界为O(n3),比直接递归算法要有效 得多。算法使用空间显然为O(n2)。 这种算法称为动态规划。

算法设计与分析 8
自底向上的计算

例如对于A1A2A3A4,依据递归式以自底向上的 方式计算出各个子问题,其过程如下:
其中 m[1][3] = 例如: m[1][1]+m[2][3]+p0p1p3 m[i][j] = mini≤k<j min m[1][3] m[2][4] m[1][2]+m[3][3]+p p2p3 {m[i][k]+m[k+1][j]+pi0–1p kp j }
算法设计与分析 14

动态规划的基本方法





动态规划通常可以按以下几个步骤进行: (1)找出最优解的性质,并刻画其结构特征; (2)递归地定义最优值; (3)以自底向上的方式计算出各子结构的最优值 并添入表格中保存; (4)根据计算最优值时得到的信息,构造最优解。 步骤1~3是动态规划算法的基本步骤。若需要 最优解,则必须执行第4步,为此还需要在第3 步中记录构造最优解所必需的信息。

i≤k<j
其中矩阵Ai ,1≤i≤n,的维数为pi–1×pi。 根据此递归式就可以直接用递归程序来实现。
算法设计与分析
5
直接递归的时间复杂性

根据前面的递归式不难得出的时间复杂性为 T(n) ≥ 1 + ∑(T(k) + T(n–k) + 1)
k=1 n–1 n–1
= 1 + (n – 1) +∑(T(k) + T(n–k))

算法设计与分析 3
分解最优解的结构
将矩阵连乘积AiAi+1…Aj记为A[i: j]。 若A[1: n] 的一个最优解是在矩阵Ak和Ak+1处 断开的,即A[1: n] = (A[1: k] A[k+1: n]),则 A[1: k]和A[k+1: n]也分别是最优解。 事实上,若A[1: k]的一个计算次序所需计算量 更少的话,则用此计算次序替换原来的次序, 则得到A[1: n]一个更少的计算量,这是一个矛 盾。同理A[k+1: n]也是最优解。 最优子结构性质:最优解的子结构也最优的。

算法设计与分析
1
不同计算顺序的差别

设矩阵A1, A2和A3分别为10×100, 100×5和 5×50的矩阵,现要计算A1A2A3 。 若按((A1A2)A3)来计算,则需要的数乘次数为 10×100×5 + 10×5×50 = 7500 若按(A1(A2 A3))来计算,则需要的数乘次数为 100 ×5 ×50+ 10×100×50 = 75000 后一种计算顺序的计算量竟是前者的10倍! 所以,求多个矩阵的连乘积时,计算的结合 顺序是十分重要的。
1: 4
图中红框标出的 都是重复计算。
3: 4
1: 2 1: 1 2: 4 1:1 2: 3 2: 2 4: 4 3: 3 2: 2
3: 3
4: 4 1: 1 2: 2 2: 3 3: 3
1: 3
4: 4
2: 2 3: 3
3: 4 4: 4
1: 2 1: 1
3: 3 2: 2
7
算法设计与分析
消除重复的计算
}}}
int t = m[i][k] + m[k+1][j] + p[i–1]*p[k]*p[j]; //对i<k<j, 逐个计算A[i, j] = A[i: k] A[k+1: j] if (t < m[i][j]) {m[i][j] = t; s[i][j] = k;} //记下较小的m[i][j]及相应的断点k
= n +∑T(k) + ∑T(n–k)
n –1 k=1 n –1 k=1 k=1 n–1
= n + 2∑T(k)
k=1

可用数学归纳法证明T(n)≥2n–1 = Ω(2n)。 直接递归算法的时间复杂性随n的指数增长。
算法设计与分析 6
直接递归中有大量重复计算

直接递归中有大量重复计算,如A[1: 4]计算中:
算法设计与分析
10
MatrixChain的运行举例
MatrixChain 用矩阵 m[i][j], s[i][j] 存放子问题 A[i: j] 当 r=2 ,执行第 (5) 句完成了相邻矩阵 –1]*p[i]*p[j] 设要计算矩阵连乘积 A4A[i][i+1]=p[i A MatrixChain 当 r=3 i=1 时,执行第 (5) 句计算 A[1:1][2:3] A[2:2][3:4] , m[1][3] = 当 r=3 , i=3 时,执行第 (5) 句计算 A[3:3][4:5] , m[3][5] = 1A2A 3 5A 6,其维数分别 执行 for (int i 将如下面红色箭头所示的过程逐个计算 = 1; i <= n; i++) m[i][i] = 0后将对角线元素全 类似的,当 r=4 、 5 、 6时,可以计算出相应的 m[i][j] 及其相 由 m[1][6]=15125 可知这 6A 个矩阵连乘积的最小运算次数为 当 r=3, ,i=2 i=4 时,执行第 (5) 句计算 A[4:4][5:6] ,m[2][4] m[4][6] = 的计算,并在 s[i][j] 中添入了相应的断点。其中的第 (7) 句因 的最小计算量以及相应的断点。 m[2][3] m[3][4] + p[0]*p[1]*p[3] p[1]*p[2]*p[4] = 2625 750 +35*15*10 +30*35*5 = 7875 6000 m[4][5] + p[2]*p[3]*p[5] = 1000 +15*5*20 = 2500 为 35 × 35, 35 × 15, 15 × 5, 5 × 10, 10 × 20, 20 × 25, 子问题 A[i: j] : 部置零,即子问题 A[i][i] = 0 。 应的断点 s[i][j] ,如下图中所示: 15125 。由 s[1][6] = 3 可知 A[1: 6] 的最优计算次序为 A[1: 3] m[5][6] + p[3]*p[4]*p[6] = 5000 +5*10*25 = 6250 为 jp =6] i+1(k=i+1) 而被跳过去了,实际并没有执行。 执行第 (7) 句计算 A[2:3][4:4] , tt = 即 =35, p =35, p可知 p p =20, pA[1: =25 。 A[4: ;由 s[1][3]=1 A[1: 3] 的最优计算次序为 1] 执行第 (7) 句计算 A[3:4][5:5] , = m[3][4]+m[5][5]+ A[4:5][6:6] m[4][5]+m[6][6]+ 0 (7)句计算 1 2=15, 3=5, 4=10, p 6+ 执行第 A[1:2][3:3] , t = m[2][3]+m[4][4]+ m[1][2] +5m[3][3] p[1]*p[3]*p[4] = 2625+0+35*5*10 = 4375 < 6000 ,所以 A[2: 3];由s[4][6]=5 可知A[4: 6]的最优计算次序为 A[4: 5] p[2]*p[4]*p[5] =15750+0+35*15*5 750+0+15*10*20 = 3750 > 2500 ,所以 p[3]*p[5]*p[6] 1000+0+5*20*25 3500 < 6250 p[0]*p[2]*p[3] = = 18375 > 7875 ,所以 m[2][4] 改为 A[6: 6];因此最优计算次序为: m[3][5] 仍为 2500 ,断点仍为 3 。 (A1(A2A3))((A4A5)A6)。 m[4][6] 改为4375 3500,断点改为 ,断点改为 5。 m[1][3] 不变,断点仍为 1。 3

算法设计与分析 13
动态规划的基本要素

最优子结构:问题的最优解是由其子问题的最 优解所构成的。 最优子结构性质使我们能够以自底向上的方式 递归地从子结构的最优解构造出问题的最优解。 重叠子问题:子问题之间并非相互独立的,而 是彼此有重叠的。 因为子问题重叠,所以存在着重复计算。这样 就可以用填表保存子问题解的方法来提高效率。
相关文档
最新文档