动态规划 陈昕昀.

Slides:



Advertisements
Similar presentations
因数与倍数 2 、 5 的倍数的特征
Advertisements

摆一摆,想一想. 棋子个数数的个数 摆出的数 、 10 2 、 11 、 20 3 、 12 、 21 、 30 4 、 13 、 22 、 31 、 40 5 、 14 、 23 、 32 、 41 、
3 的倍数特征 抢三十

3 的倍数的特征 的倍数有 : 。 5 的倍数有 : 。 既是 2 的倍数又是 5 的倍数有 : 。 12 , 18 , 20 , 48 , 60 , 72 , , 25 , 60 ,
因数与倍数 2 、 5 的倍数的特征 绿色圃中小学教育网 扶余市蔡家沟镇中心小学 雷可心.
2 和 5 的倍数的特征 运动热身 怎样找一个数的倍数? 从小到大写出 2 的倍数( 10 个): 写出 5 的倍数( 6 个) 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 5 , 10 , 15 , 20 , 25 , 30.
你不知道的 3M P 班級 : 創意二甲 指導老師 : 袁又華 組長 : 林毓茹 組員 : 林以軒 林欣汝 陳盈羽 陳怡如 劉玉婷.
练一练: 在数轴上画出表示下列各数的点, 并指出这些点相互间的关系: -6 , 6 , -3 , 3 , -1.5, 1.5.
第2章 证券市场的运行与管理.
第二章 二次函数 第二节 结识抛物线
Knapsack Problem (背包问题)
第一章 行列式 第五节 Cramer定理 设含有n 个未知量的n个方程构成的线性方程组为 (Ⅰ) 由未知数的系数组成的n阶行列式
动态规划(四).
小学生游戏.
2-7、函数的微分 教学要求 教学要点.
余角、补角.
初中数学八年级下册 (苏科版) 10.4 探索三角形 相似的条件(2).
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
拓展 问题 探究 练习 北师大版 五年级上册 第五单元 分数的意义 绿色圃中小学教育网
第5章 §5.3 定积分的积分法 换元积分法 不定积分 分部积分法 换元积分法 定积分 分部积分法.
5.5动态规划求解0/1背包问题.
元素替换法 ——行列式按行(列)展开(推论)
What have we learned?.
动态规划(Dynamic Programming)
绿色圃中小学教育网 比例 比例的意义 绿色圃中小学教育网
使用矩阵表示 最小生成树算法.
第4章 非线性规划 4.5 约束最优化方法 2019/4/6 山东大学 软件学院.
第一章 函数与极限.
计算.
数列.
10066: The Twin Towers ★★★☆☆ 題組:Problem Set Archive with Online Judge
专题作业.
线段的有关计算.
顺序表的删除.
线性规 Linear Programming
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
第九章 动态规划 第二节 背包问题.
离散数学─归纳与递归 南京大学计算机科学与技术系
用计算器开方.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
信号量(Semaphore).
正切函数的图象和性质 周期函数定义: 一般地,对于函数 (x),如果存在一个非零常数T,使得当x取定义域内的每一个值时,都有
用穷举法设计程序 南京师范大学 教育技术系 倪佳慧
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
动态规划之背包.
第五节 缓冲溶液pH值的计算 两种物质的性质 浓度 pH值 共轭酸碱对间的质子传递平衡 可用通式表示如下: HB+H2O ⇌ H3O++B-
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
第三章 函数的微分学 第二节 导数的四则运算法则 一、导数的四则运算 二、偏导数的求法.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
第七、八次实验要求.
6×3= 6×30= 60×30= 14×2= 14×20= 140×2= 25×2= 25×20= 250×20= 算一算 18 28
上杭二中 曾庆华 上杭二中 曾庆华 上杭二中 曾庆华.
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
平行四边形的性质 鄢陵县彭店一中 赵二歌.
主讲人: 吕敏 { } Spring 2012 ,USTC 算法基础 主讲人: 吕敏 { } Spring 2012 ,USTC.
第二节 函数的极限 一、函数极限的定义 二、函数极限的性质 三、小结 思考题.
正弦、余弦函数的性质 华容一中 伍立华 2017年2月24日.
直线的倾斜角与斜率.
生 物 信 息 学 Bioinformatics 巩晶 癌症研究中心 山东大学 医学院
动态规划 Floyd最短路径算法 高文宇
动态规划算法 Dynamic Programming
本底对汞原子第一激发能测量的影响 钱振宇
插入排序的正确性证明 以及各种改进方法.
任课教师:戴开宇 TA:时均帅、谭肖、王安华 程序设计B班 :20-16:50(90分钟)
§4.5 最大公因式的矩阵求法( Ⅱ ).
一元一次方程的解法(-).
最小生成树 最优二叉树.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
学习目标 1、什么是列类型 2、列类型之数值类型.
Presentation transcript:

动态规划 陈昕昀

数字三角形问题 给定一个具有n层的数学三角形如下图,从顶至底有多条路径,每一步可沿左斜线向下或沿右斜线向下,路径所经过的数字之和为路径得分,请求出最小路径得分。 2 6 2 1 8 4 1 5 6 8

分析: 考虑第i层与第i+1层的关系 设f[i,j]表示第i层,第j列位置上的最小路径得分 则f[i,j]=min{f[i+1,j],f[i+1,j+1]}+a[i,j]

网格路线问题 给出一个n行m列的网格,左下角坐标为(1,1),右上角坐标(n,m),一个物体从左下角开始只能沿着向上或向右的方向前进到下一个结点,问 从(1,1)出发,到(n,m)共有多少条路径?   (n,m)   (1,1)

到每一个点的路径总条数只由到它的左边和下面的点的路径条数决定 分析: 到每一个点的路径总条数只由到它的左边和下面的点的路径条数决定 f[x][y]=f[x-1][y]+f[x][y-1]      

总结: 数字三角形问题——目的:求得最优解 网格路线问题——目的:统计可行解 共同点: (1)具备有很明显的层次结构关系,把这种层次结构叫做子结构; (2)子结构间存在着递推关系; (3)通过求得子结构的值或子结构的最优值,可以获得最终的解。 定义: 当问题具备有子结构,通过求得子结构的值或子结构的最优值,而递推求得最终的解。这种解决问题的方法称之为动态规划算法。

动态规划算法的有效性依赖于待求解问题本身具有的两个重要性质:最优子结构性质和子问题重叠性质。 1、最优子结构性质:问题的最优解所包含的子问题的解也是最优的。 2、子问题重叠性质:用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存下来,当再次需要计算已经计算过的子问题时直接查询,从而获得较高的解题效率。

最长公共子序列问题(LCS) 字符序列的子序列是指从给定字符序列中 随意地(不一定连续)去掉若干个字符(可 能一个也不去掉)后所形成的字符序列。给 定两序列X和Y,求它们的最长公共子序列。

f[i][j]记录X的前i个字符构成的串与Y 的前j个字符构成的串的LCS长度 分析: f[i][j]记录X的前i个字符构成的串与Y 的前j个字符构成的串的LCS长度 f[i][j] = 0 if i = 0 or j = 0 = max(f[i][j-1],f[i-1][j], f[i-1][j-1]+1) if i,j>0 and xi = yj = max(f[i][j-1],f[i-1][j]) if i,j>0 and xi != yj :

最长上升子序列问题(LIS) 描述: 给出一个数列,要求从这个数列中找出 一个最长的子列,使得这个子列的元素是 严格单调上升的。 Sample Input: 10 3 7 5 4 6 8 5 7 6 7 Sample Output: 5

分析: 设f[i]表示第i位数字的最长上升子序列长 度,则f[i]值只与a[j]<a[i](j<i)对应的子 序列有关 f[i]=max{f[j](a[j]<a[i](j<i))}+1

上述算法复杂度为O(n^2)。 可以降低么? 样例: 序列 3 7 5 4 6 8 5 7 6 7 上升长度 1 2 2 2 3 4 3 4 4 5 考虑最后一个7,其上升长度为5,故在一个长度为4的序列尾部。注意观察长度为4的序列,比如3 5 6 8,3 4 5 7,3 4 5 6。最优序列为3 4 5 6 7。 故相同长度的子序列的有效信息是其序列中尾数最小的数。

建立一个数组s[k]来储存所有长度为k的最长上升子序列的最后一个数字的最小值。假如当前要求的为f[i],则此时s[k]=min{a[j](f[j]=k,1<=j<i)} 具体算法: (1)用二分法在s[k]中寻找最大的一个k使s[k]<a[i],让f[i]=k+1。 (2)s[f[i]]=min{s[f[i]],a[i]} 这样,使算法的复杂度下降为O(nlog2n)。

01背包问题 在n件物品取出若干件放在容量为m的背包 里,每件物品的重量为w1,w2,…wn,与 之相对应的价值为p1,p2,…,pn。求所能获 得的最大价值。m与wi均为整数。

分析: 设f[i,v]表示考虑到第i个物品,容量值为v时的最大价值 f[i,v]=max{f[i-1,v],f[i,v-w[i]]+p[i]} 可以优化吗? 空间可以降低一维。 f[v]=max{f[v],f[v-w[i]]+p[i]}

for (i=1;i<=n;i++) for (v=m;v>=w[i];v--) f[v]=max(f[v],f[v-w[i]]+p[i]); 注意: v的循环顺序不能反。为什么? 保证f[v-w[i]]为未考虑当前物品的最大价值,本题的前提是每个物品只能放一次。

完全背包问题  有n种物品和一个容量为m的背包,每种物 品都有无限件可用。第i种物品的重量是 wi,价值是pi。求解将哪些物品装入背包 可使这些物品的费用总和不超过背包容量, 且价值总和最大。

容易想到的方程: f[v]=max{f[v-k*wi]+k*pi{0<=k*w<= v} 求解每个状态的时间不是常数,总时间复杂度超过O(nm)。 如何改进?

for (v=w[i];v<=m;v++) f[v]=max(f[v],f[v-w[i]]+p[i]); for (i=1;i<=n;i++) for (v=w[i];v<=m;v++) f[v]=max(f[v],f[v-w[i]]+p[i]); 举个例子帮助理解: 设第i物品重量为2。 f[2]=max{f[2],f[0]+p[i]}此时考虑了i物品放入1次 f[4]=max{f[4],f[4-2]+p[i]}此时考虑了i物品放入2次 f[6]=max{f[6],f[6-2]+p[i]}此时考虑了i物品放入3次 ……

阶梯教室设备利用 题意:一间阶梯教室,n个演讲,第i个演讲起止时间分别为s[i]与e[i]。如果两个演讲时间有重叠,那么它们无法同时在阶级教室中举行。现要求在这些演讲中选择一些不重复的演讲来举行使得他们用的总时间尽可能的长,求这一最长时间。我们假设在某一演讲结束的瞬间我们就可以立即开始另一个演讲。

f[i]:第i个演讲举行后教室最长的使用时间。 分析: 方法一: 以演讲任务为阶段。 对演讲结束时间进行升序排列,使之有序。 f[i]:第i个演讲举行后教室最长的使用时间。 第二种方法: t:表示结束时间为i的 F[i]=max{F[i-1],F[s[t]]+(e[j]-s[j])} F[0]=0 f[i]=max{f[j]}+e[i]-s[i](1≤j≤i-1,e[j]≤s[i]) 初值:f[0]=0

分析: 方法二: 以时间为阶段。 f[i]:到i分钟为止教室的最长使用时间。 f[i]=max{f[s[j]]+i-s[j]}(1≤j≤n,s[j]≤i≤e[j])}

POJ2228 Naptime 题意:有头牛喜欢睡觉,一天被其分成了 n(3<=n<=3830)份,它可以选择至多m份 (2<=m<n)进行睡觉。每个时间段睡觉所得的 收益(非负)不同,且它每次睡觉都必须花一 份时间来入睡(算在m中,但是却没有收 益),每天被视为一个环,即如果第n份没 有在入睡或者熟睡状态,第一份时间就不能 是熟睡状态,求最大收益。

分析: f[i][j][k]表示前i个阶段,睡了j个时间 段,且第i个时间段没睡(k=0)或在睡(k=1)。 考虑1与n不相邻的情况 f[i][j][0]=max{f[i-1][j][0],f[i-1][j][1]} f[i][j][1]=max{f[i-1][j-1][1]+a[i],f[i-1][j-1][0]}

1与n相邻 枚举第一个时段算不算收益 (1)不算:ans=max{f[n][m][0],f[n][m][1]}; (2)算:第n个时间段必须睡 ans=f[n][m][1] 初值:f[1][1][1]=a[1]

拓展: DP类型: 区间DP 树型DP 状态压缩DP …… 优化方式: 滚动数组 单调队列优化 斜率优化

总结 动态规划算法设计步骤: 1、分析问题的最优解,找出最优解的性 质,并刻画其结构特征; 2、递归地定义最优值; 3、采用自底向上的方式计算问题的最优 值; 4、根据计算最优值时得到的信息,构造 最优解。

Thanks for Listening!