a09-chap15(3)-dp 算法导论 教学课件
算法导论文档
第一课课程细节;绪论:算法分析,插入排序法(Insertion Sort),归并排序(Merge Sort) 阅读:1-2章发测验02 演示课1 算法的正确性发《作业1》3 第二课渐进记号(Asymptotic Notation)。
递归公式(Recurrences):置换法,迭代法,主方法阅读:3-4 章,除了§4.44 第三课分治法:Strassen 算法,费氏数列,多项式乘法。
阅读:28 章第2 节,30章第1节5 演示课2 递归公式,松散性阅读:Akra-Bazzi 的讲义6 第四课快速排序法,随机化算法阅读:5 章1 到 3 节,7 章收《作业1》发《作业2》7 演示课3 排序法:堆排序,动态集合,优先队列阅读:6 章8 第五课线性时间的排序法:时间下界,计数排序法,基数排序法阅读:8 章第1 到3 节收《作业2》发《作业3》9 第六课顺序统计学,中位数阅读:9 章10 演示课4 中位数的应用,桶排序阅读:8 章第 4 节11 第七课散列,全域散列阅读:11 章1 到3 节收《作业3》发《作业4》12 第八课散列函数,完美散列阅读:11 章第5 节13 演示课5 测验1 复习收《作业4》14 评分后的作业4可以在中午拿到15 测验116 演示课6 二叉搜索树,树的遍历阅读:12 章1 到 3 节17 第九课二叉搜索树和快速排序法之间的关系;随机二叉搜索树的分析阅读:12 章4 节发《作业5》18 第十课红黑树,旋转,插入,删除阅读:13 章19 演示课7 2-3树,B-树阅读:18 章1 到 2 节20 第十一课高级数据结构,动态顺序统计,线段树(区间树)阅读:14 章收《作业5》发《作业6》21 第十二课计算几何,区间查询阅读:33 章1 到 2 节22 演示课8 凸多边形阅读:33 章3 节23 第十三课van Emde Boas树,优先队列阅读:van Emde Boas 的讲义收《作业6》发《作业7》24 第十四课平摊分析,表的复制,可能法阅读:17 章25 演示课9 竞争分析,自我排序列26 第十五课动态规划,最长公共子序列,最优二叉搜索树阅读:15 章收《作业7》发《作业8》27 第十六课贪婪算法,最小生成树阅读:16 章1 到 3 节,23 章28 演示课10 贪婪算法和动态规划的范例29 第十七课最短路径1,Dijkstra算法,广度优先搜索阅读:22 章1, 2 节;第580 - 587 页,24章 3 节收《作业8》发《作业9》30 演示课11 深度优先搜索,拓扑排序阅读:22 章3 到 5 节31 第十八课最短路径2,Bellman-Ford算法,DAG最短路径,差分约束阅读:24 章1, 2, 4, 5 节32 第十九课所有点对最短路径,Floyd-Warshall,Johnson 的算法阅读:25 章收《作业9》33 第二十课不相交集合的数据结构阅读:21 章34 评分后的作业9可以在中午拿到35 第二十一课带回家发下测验2 ; 道德,解决问题(强制参加)发测验236 没有演示课- 解答测验2!37 没有课算法程序比赛开始(非强制参加)收测验238 第二十二课网络流,最大流最小割切定理阅读:26 章1 - 2 节发《作业10》(选答)39 演示课12 图的匹配算法(注:最大二分匹配)阅读:26 章3 节40 第二十三课网络流,Edmonds-Karp 算法参赛答案截止41 第二十四课随堂测验;比赛颁奖;后续课程的讨论《作业10》解答。
《算法导论第5章》课件
伪代码
for j = 2 to A.length key = A[ j] i = j-1 while i > 0 and A[i] > key A[i+ 1] = A[i] i = i-1 A[i+ 1] = key
时间复杂度分析
最好情况:O(n) 最坏情况:O(n^2)
归并排序
算法介绍
将序列递归地划分成两个子序列,分别排序,再将排好序的子序列归并成一个有序序列。
《算法导论第5章》PPT 课件
在本课程中,我们将学习算法导论的第5章。从插入排序、归并排序到堆排序, 我们将深入学习这些算法。让我们开始吧!
导言
1 课程背景
了解算法的基本概念和应用,提高编程能力。
2 课程目标
完成算法的实现,理解其在计算机科学中的重要性。
插入排序
算法介绍
将未排序的元素一个一个地插入 到已排序的序列中。
伪代码
if p < r q = floor((p+r)/2) Merge-Sort(A, p,q) Merge-Sort(A, q+1,r) Merge(A, p,q,r)
时间复杂度分析
O(n log n)
堆排序
算法介绍
利用堆这种数据结构进行的 选择排序算法。
伪代码
Build-Max-Heap(A) for i = A.length downto 2 swap A[1] with A[i] A.heap-size = A.heapsize - 1 Max-Heapify(A, 1)
时间复杂度分析
O(n log n)
总结
1
算法选择与优化
重要性在于算法的选择和优化。
2
算法导论15-3
算法导论15-3读书笔记本⼩节讲述了两点内容:1. 合适动态规划算法解决的最优化问题的两个要素2. 备忘⽅法在动态规划中的作⽤两个要素最优⼦结构⼀个问题的最优解包含其⼦问题的最优解还有⼀点值得注意,同时还需要满⾜⼦问题⽆关的特性:同⼀个原问题的⼀个⼦问题的解不影响另⼀个⼦问题的解。
重叠⼦问题某⼀个⼦问题可能会被包含在多个问题中,被反复求解。
备忘机制重构最优解备忘录常常不仅仅存储⼦问题的代价,还需要存储⼦问题最优解的选择过程。
就像是在矩阵链中,我们不仅保存了代价,还保存了括号划分点;备忘由于动态规划算法解决的问题具有重叠⼦问题的性质,所以备忘机制存储已经求解过的⼦问题的解,极⼤地降低了时空代价。
课后练习15.3-1对于矩阵链乘法问题,下⾯两种确定最优代价的⽅法哪种更⾼效?第⼀种⽅法是穷举所有可能的括号化⽅案,对每种⽅案计算乘法运算次数;第⼆种⽅法是运⾏RECURSIVE−MATRIX−CHAIN。
证明你的结论。
毫⽆疑问,第⼆种⽅法更⾼效。
15.3-2对⼀个16个元素的数组,画出2.3.1节中MERGE−SORT过程运⾏的递归调⽤树。
解释备忘技术为什么对MERGE−SORT这种分治算法⽆效。
因为没有⼦问题重叠。
15.3-3考虑矩阵链乘法问题的⼀个变形:⽬标改为最⼤化矩阵序列括号化⽅案的标量乘法运算次数,⽽⾮最⼩化。
此问题具有最优⼦结构吗?具有最优⼦结构。
15.3-4如前所述,使⽤动态规划⽅法,我们⾸先求解⼦问题,然后选择哪些⼦问题⽤来构造原问题的最优解。
Capulet教授认为,我们不必为了求原问题的最优解⽽总是求解出所有的⼦问题。
她建议,在求矩阵链乘法问题的最优解时,我们总是可以在求解⼦问题之前选定A i A i+1..A j划分位置A k(选定的k使得p i−1p k p j最⼩)。
请找出⼀个反例,证明这个贪⼼⽅法可能⽣成次优解。
//todo15.3-5对15.1节的钢条切割问题加⼊限制条件:假定对于每种钢条长度i(i=1,2,...,n−1),最多允许切割出l i段长度为i的钢条。
算法导论第十五章
算法导论第⼗五章15.115.1-1证明:T(n) = 1+\(\sum_0^{n-1}T(j)\)令S(n) = \(\sum_0^nT(j)\)则S(n) - S(n-1) = 1 + S(n-1)S(n) = \(2^{n+1}\)-1T(n) = \(2^n\)15.1-2长度i1234价格pi146.54价格密度126.5/31按照贪⼼策略分割为3、1,总价格为7.5然⽽最优解为2、2,总价格为815.1-3#include <limits.h>int *solution(int *p, int n, int c){int r[n+1];r[0] = 0;for (int i = 1; i <=n; i++){int q = INT_MIN;for (int j = 1; j <= i; j++){q = max(q, p[j]+r[i-j]-c);}r[i] = q;}return r;}15.1-4#include <limits.h>void MEMORIZED_CUT_ROD_AUX(int *p, int n, int *r, int *s){if (r[n] >= 0){return r[n];}if (n == 0) q = 0;else{q = INT_MIN;for (int i = 1; i <= n; i++){int rest = MEMORIZED(p, n-i, r, s);if (q < p[i] + rest){q = p[i] + rest;s[n] = i;}}r[i] = q;}return q;}void MEMOIZED_CUT_ROD(int *p, int n){int r[n+1];for (int i = 0; i <= n; i++){r[i] = INT_MIN;}int s[n+1];return MEMORIZED_CUT_ROD_AUX(p, n, r, s);}15.1-5int solution(int n){int res[MAX_SIZE];res[0] = 0;res[1] = 1;for (int i = 2; i <= n; i++){res[i] = res[i-1]+res[i-2];}return res[n];}15.215.2-1123456 6204019501770186015000 5193024309303000044053301800333036002150010最优化括号⽅案:(\(A_1\)\(A_2\))((\(A_3A_4\))(\(A_5A_6\)))15.2-2typedef struct{int matrix[MAX_SIZE][MAX_SIZE];int n;int m;}Matrix;Matrix MATRIX_CHAIN_MUTIPLY(Matrix *a, int **s, int front, int rear) {if (front == rear){return a[front];}else{int p = s[front][rear];Matrix t = MATRIX_CHAIN_MUTIPLY(a, s, front, p);Matrix y = MATRIX_CHAIN_MUTIPLY(a, s, p+1, rear);Matrix u;u.n = t.n;u.m = y.m;for (int i = 0; i < t.n; i++){for (int j = 0; j < t.m; j++){for (int k = 0; k < t.m; k++){u.matrix[i][k] += t.matrix[i][j]*y.matrix[j][k];}}}return u;}}15.2-3证明:设P(k) >= \(c2^k\)P(n) = \(\sum_1^{n-1}\)P(k)P(n-k)\(\geq\)\(\sum_1^{n-1}c2^k*c2^{n-k}\)\(\geq\)\(\sum_1^{n-1}c^22^n\)\(\geq\)\(c2^n\)15.2-4\(\frac{n^2-n}{2}\)个顶点,2(n-2)条边,分别连接顶点(1, i)、(i+1, n)(i = 2,3,4,...,n-1)15.2-5由条件。
a11-chap15(4)-dp 算法导论 教学课件
Given two sequences X= <x1, x2, ..., xm> and Y= <y1, y2, ..., yn>, how to find a maximum-length common subsequence of X and Y .
(设zk≠xm, 令Z’= <z1 , ... , zk , xm>,则 Z’ 是 X 和 Y 的相同子序列,且 length(Z’)=k+1 ⇒ Z’ 是比 Z 更长的子序列 ⇒ 与题设 Z 是LCS矛盾)
Now show Zk-1 is an LCS of Xm-1 and Yn-1. Clearly, it’s a CS. Now suppose there exists a CS W of Xm-1 and Yn-1 that’s longer than Zk-1 ⇒length(W) ≥ k. Make subsequence W’ by appending xm to W. W’ is CS of X and Y , length(W’)≥k+1 ⇒ contradicts Z being an LCS.
举出 X 的所有子序列,逐项核查这些子序列是否为 Y 的子序列)
Each subsequence of X corresponds to a subset of the
indices {1, 2, ..., m} of X. There are 2m subsequences of
X . Exponential time, impractical for long sequences.
算法导论详解PPT课件
computing
“计算机算法的圣经”
Bibliography
《Introduction to Algorithms》(Second Edition),
T. H. Cormen, C. E. Leiserson, R. L. Rivest (2002, Turing Award),
The MIT Press
}
利用此界面使 方法sum通用化
18
第18页/共25页
1.3 描述算法
6.通用方法
(2)parable 界面 Java的Comparable 界面中惟一的方法头compareTo用于比较
2个元素的大小。例如pareTo(y) 返回x-y的符号,当x<y时返回负数,当x=y时返回0,当x>y时返 回正数。 (3)Operable 界面
8
第8页/共25页
1.2 表达算法的抽象机制
2.抽象数据类型
抽象数据类型是算法的一个数据模型连同定义在该模型上 并作为算法构件的一组运算。
抽象数据类型带给算法设计的好处有:
(1)算法顶层设计与底层实现分离; (2)算法设计与数据结构设计隔开,允许数据结构自由选择; (3)数据模型和该模型上的运算统一在ADT中,便于空间和时间耗费的折衷; (4)用抽象数据类型表述的算法具有很好的可维护性; (5)算法自然呈现模块化; (6)为自顶向下逐步求精和模块化提供有效途径和工具; (7)算法结构清晰,层次分明,便于算法正确性的证明和复杂性的分析。
期末闭卷考试:
about 70%
课程安排
课堂讲解:基本理论讲解,基本方法的介绍分析
上机实践:基本习题和经典习题的上机实践
第4页4 /共25页
主要内容介绍
人教版高中数学必修三课件:第一章 算法初步(共25张PPT)
当型循环在每次执行循环体前对循环条件进行判 断,当条件满足时执行循环体,不满足则停止;(当条 件满足时反复执行循环体)
循环体
满足条件?
是
否
Until(直到型)循环
循环体
满足条件?
是 否
While(当型)循环 17
练习: 1.就逻辑结构,说 出其算法功能.
开始
2.此为某一函数的求值程序 图,则满足该流程图的函数 解析式为( ).
6
(2)构成程序框图的图形符号及其作用
终端框 (起止框) 输入、 输出框
表示一个算法的起始和结束
表示一个算法输 入和输出的信息
处理框
赋值、计算
(执行框)
判断某一条件是否成立,成
判断框
立时在出口处标明“是” 或“Y”,不成立时标明“否”
或“N”.
流程线
连接程序框
连结点
连接程序框图的两部分
7
6
开始
顺
(3)程序设计语言 1.2基本算法语句中讲解
4
算法初步
§1.1.2 程序框图
5
二、新课
1、程序框图 (1)程序框图的概念
程序框图又称流程图,是一种用规定的 程序框、流程线及文字说明来准确、直观地 表示算法的图形。
在程序框图中,一个或几个程序框的组 合表示算法中的一个步骤;带有方向箭头的 流程线将程序框连接起来,表示算法步骤的 执行顺序。
k 8 _________?_____
k=10 , s=1
是
s=s×k k=k-1
第7题图
否
输出s 结束
25
1
讲授新课
1.算法的定义
在数学中,算法通常是指按照一定规则 解决某一类问题的明确和有限的步骤.现在, 算法通常可以编成计算机程序,让计算机执 行并解决问题.
第1讲算法导论讲述
广州大学华软软件学院
第3页
算法分析与设计 3
算法(Algorithm)
• 算法是指解决问题的一种方法或一个过程。 • 算法是若干指令的有穷序列,满足性质: • (1)输入:有外部提供的量作为算法的输入。 • (2)输出:算法产生至少一个量作为输出。
lim
n
• 若λ=非零常数,则称Ỹ(n)是T(n)的渐近表达式, 或称T(n)渐近等于Ỹ(n),记为 T(n)=Θ(Ỹ(n)),这个记号称为算法运 行时间的渐近Θ-记号,简称为Θ-记号。
T ( n)
广州大学华软软件学院
第11页
算法分析与设计 11
5.有效算法
• 如果两个算法运行时间的渐近表达式相同,则将 它们视为具有相同时间复杂度的算法。显然,渐 近时间为对数幂的算法优于渐近时间为幂函数的 算法,而渐近时间为幂函数的算法则优于渐近时 间为指数函数的算法。我们把渐近时间为幂函数 的算法称为是具有多项式时间的算法,渐近时间 不超过多项式的算法则称其为有效的算法。
广州大学华软软件学院
第9页
算法分析与设计 9
3.实例
• 在线性表A中查找。 • (a)查找值为x=1的元素, 从A[1]起依次要进行5次检测, 第一次找到值为1的元素。 • (b)查找值为x=11的元素, 从A[1]起依次检测完所有元素 (进行10次检测),没有找到 值为11的元素——最坏情形。 • (c)查找值为x=3的元素, 从A[1]起仅进行一次检测就找 到值为3的元素——最好情形。
高中数学必修3第一章算法初步(课堂PPT)
二、程序框图
用程序框、流程线及文字说明来表示算 法的图形称为程序框图,它使算法步骤显得 直观、清晰、简明.
○
终端框 输入、 处理框 (起止框) 输出框 (执行框) 判断框 流程线 连接点
5
程序框图又称流程图,是一种用规定的图形,指向线及 文字说明来准确、直观地表示算法的图形。
程序框
名称
功能
终端框(起 表示一个算法的起始和结束 止框)
算法最重要的特征: 1.有序性 2.确定性 3.有限性
3
算法的基本特点
1、有限性
一个算法应包括有限的操作步骤,能在执 行有穷的操作步骤之后结束。
2、确定性 算法的计算规则及相应的计算步骤必须是唯 一确定的,既不能含糊其词,也不能有二义 性。
3、有序性 算法中的每一个步骤都是有顺序的,前一步 是后一步的前提,只有执行完前一步后,才 能执行后一步,有着很强逻辑性的步骤序列4。
结束
END 17
练:编写一程序,求实数X的绝对值。
开始
程序:
输入X 条件结构: INPUT X 条件语句:
X≥0 N
Y 输出X
输出-X
IF X>=0 THEN PRINT X
ELSE PRINT -X
END IF
结束
END
18
当型循环语句
练:设计一算法,求和1+2+3+ … +100。
程序框图: 程序语句:
(2)一个语句可以给多个变 量赋值,中间用“,”分隔
(3)无计算功能
可输出表达式 的值,计算
(1)表达式可以是变量, 计算公式,或系统信息 (2)一个语句可以输入多
个表达式,中间用“,”分隔 (3)有计算功能
算法c语言基础PPT课件
Step 1: 比较两个数,显示较大的数 Step 2: 算法结束
没有输入!
算法的五个特性【难点】 没有输出的情形
Concept of Algorithm
Step 1: 输入一个数 Step 2: 求大于该数的最小偶数 Step 3: 算法结束
没有输出!
从计算的本质看算法* 计算:从一个已知的符号串【输入】开始,按照一定的规则【确定性】改变符号串【有效性】,经过有限步骤【有穷性】,最后得到一个满足预先规定的符号串【输出】,这种变换过程就是计算 计算就是符号串的连续变换【算法的执行】
变量(内存单元)
变量(内存单元)
自然语言描述【重点】 用自然语言把算法表示为有穷的步骤 需要保证算法的五个特征(在一定的抽象层次上) 一般形式
Representation of Algorithm
算法名称:【算法命名】 输入:【算法的输入信息】 输出:【算法的输出结果】 Step 1: Step 2: …
Concept of Algorithm
计算过程(e.g.,OS)
算法的五个特性【难点】 有穷性破坏的情形
Concept of Algorithm
Step 1: 打印数字1 Step 2: 打印下一个自然数 Step 3: 转Step 2
死循环!
算法的五个特性【难点】 确定性破坏的情形
Concept of Algorithm
伪代码(Pseudo-code)——掌握程序控制结构之后经常会使用 算法的类程序语言描述形式,目的是为了使被描述的算法可以容易地以任何一种编程语言(Pascal,C,Java)实现 要求结构清晰、代码简单、可读性好,并且类似自然语言, 介于自然语言与编程语言之间 可以用C语言的语法编写,但只强调程序控制结构
算法导论doc
第1章算法在计算中的作用章算法在计算中的作用什么是算法?为什么要对算法进行研究?相对于计算机中使用的其他技术来说,算法的作用是什么?在本章中,我们就要来回答这些问题. 1. 1算法算法简单来说,所谓抹法(also*llem)就是定义良好的计算过程,它取一个或一组值作为输入,并产生出一个或一组值作为输出。
并产生出一个或一组值作为输出。
亦即,亦即,算法就是一系列的计算步驭,算法就是一系列的计算步驭,用来将输人数据转换用来将输人数据转换成输出结果。
成输出结果。
我们还可以将算法看作是一种工具。
用来解决一个具有良好规格说明的计算问题。
有关该问题的表述可以用通用的语言,来规定所需的输人/输出关系。
与之对应的算法则描迷了一个特定的计算过程,用于实现这一输人/输出关系输出关系例如.假设需要将一列数按非降顺序进行排序。
在实践中,这一问皿经常山现。
它为我们引入许多标准的算法设计技术和分析工具提供了丰富的问题场景。
下面是有关该排序间题的形式化定义,的形式化定义,输入:由n 个数构成的一个序列编出:对输人序列的一个排列(重排) 例如,给定一个输人序列(31. 41. 59. 26, 41, 58).一个排序算法返回的怕出序列是(26, 31. 41. 41. 58, 59).这样的一个输人序列称为该排序问趣的一个实例G .-e)。
一般来说,。
一般来说,某一个问题的实例包含了求解该间题所需的输人(它满足有关该同题的表述中所给出的任何限制)。
在计算机科学中,排序是一种基本的操作(很多程序都将它用作一种申间步骤)。
因此,迄今为止,科研人员提出了多种非常好的排序算法。
科研人员提出了多种非常好的排序算法。
对于一项特定的应用来说,对于一项特定的应用来说,对于一项特定的应用来说,如何选择最如何选择最佳的排序算法要考虑多方面的因素,其中最主要的是考虑待排序的数据项数、这些数据项已排好序的程度、对数据项取值的可能限制、对数据项取值的可能限制、打算采用的存储设备的类型打算采用的存储设备的类型〔内存、磁盘、磁带)等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
15.3.1 Optimal substructure : Subtleties Shortest path has optimal substructure.
Suppose p is shortest path u v. Let w be any vertex on p. Let p1 be the portion of p, u w. Then p1 is a shortest path u w. Proof Suppose there exists a shorter path p’1, u
Optimal substructure doesn’t apply to all optimization problems.
Here are two problems that look similar. In both, we’re given an unweighted, directed graph G = (V, E ). (无权有向图) V is a set of vertices; E is a set of edges.
no need to try a more general space of subproblems.
6
15.3.1 Optimal substructure
How to characterize the space of subproblems? simple, expand
7
15.3.1 Optimal substructure
Optimal substructure varies across problem domains:
How many choices in determining which subproblem(s) to use.
Finding a path from vertex u to vertex v. Shortest path: find path u to v with fewest edges. Must be simple (no cycles), since removing a cycle from a path gives a path with fewer edges. (最短路径) Longest simple path: find simple path u to v with most edges. If didn’t require simple, could repeatedly traverse a cycle to make an arbitrarily long path. (最长简单路径)
Mmatrix-chain multiplication Ai Ai+1…Aj j-i choices We choose from among j-i candidates for the index k. two optimal subproblems
For a givehesizing AiAi+1…Ak and parenthesizing Ak+1Ak+2…Aj , How to solve both of them optimally?
intermediate vertices w, then finding shortest paths u w and
w v.
14
15.3.1 Optimal substructure : Subtleties Does longest simple path have optimal substructure?
subproblem: optimal parenthesizations of AiAi+1… Ak and Ak+1Ak+1… Aj ,
cost attributable to the choice: pi-1pk pj .
12
15.3.1 Optimal substructure : Subtleties
A1 A2 … Ak Ak+1 Ak+2 … Aj
Matrix-chain multiplication constrain subproblem space to matrix products A1A2…Aj , an optimal parenthesization split this product between Ak and Ak+1 for some 1≤k<j , we had subproblems of the form A1A2…Ak and Ak+1Ak+2…Aj , the latter subproblem is not of the form A1A2…Aj , it was necessary to allow our subproblems to vary at “both ends”, that is, to allow both i and j to vary in the subproblem AiAi+1…Aj .
Assembly-line scheduling subproblems: fastest way through stations S1, j-1 and S2, j-1, cost attributable to the choice: ai, j if we stay on the same line; or ti′,j-1 + ai,j , where i′≠ i, if we switch.
(动态规划法的特征)
Longest common subsequence (最长相同子序列) Optimal binary search trees (最优二叉搜索树)
1
Optimal substructure (We have already known)
A1A2A3A4A5A6 ((A1(A2A3)) ((A4A5)A6))
Examples: Assembly-line scheduling
space of subproblems : fastest way from factory entry through stations S1, j and S2, j ,
(子空间:从入口处开始,通过 S1,j , S2,j 的最快方式)
Matrix-chain multiplication Ai Ai+1 … Ak Ak+1 Ak+2 … Aj Θ(n2) subproblems overall, at most n-1 choices for each ⇒ O(n3) running time.
10
15 Dynamic Programming Scheduling two automobile assembly lines
(流水线、装配线调度)
Matrix-chain multiplication
(矩阵链相乘,或矩阵连乘问题)
Characteristics of dynamic programming
15.3.1 Optimal substructure
Dynamic programming uses optimal substructure bottom up. find optimal solutions to subproblems,(求子问题的最优解) choose which to use in optimal solution to the problem.
After the choice, how many optimal subproblems are shown in an optimal solution to the original problem.
Assembly-line scheduling two choices (for Si, j use either S1, j-1 or S2, j-1) one optimal subproblem
(选择子问题,使得原问题的最优解中包含此子问题的最优解)
Cost of the problem solution = subproblem costs + cost directly attributable to the choice itself.
(问题求解的开销 = 子问题的开销 + 与选择子问题相关的开销)
3
15.3.1 Optimal substructure
How to characterize the space of subproblems?
Keep the space as simple as possible, Expand it as necessary.
8
15.3.1 Optimal substructure Optimal substructure varies across problem domains:
How many choices ; How many subproblems
Ai Ai+1 … Ak Ak+1 Ak+2 … Aj
2
15.3 Elements of dynamic programming When the dynamic-programming method applies? Mentioned already:
optimal substructure overlapping subproblems
w. cut out p1,
replace it with p’1, get path
with fewer edges than p.
Same argument applies to p2. Therefore, we can find shortest path u v by considering all