收藏 分享(赏)

动态规划例题选讲.ppt

上传人:cjc2202537 文档编号:1006380 上传时间:2018-05-16 格式:PPT 页数:39 大小:176KB
下载 相关 举报
动态规划例题选讲.ppt_第1页
第1页 / 共39页
动态规划例题选讲.ppt_第2页
第2页 / 共39页
动态规划例题选讲.ppt_第3页
第3页 / 共39页
动态规划例题选讲.ppt_第4页
第4页 / 共39页
动态规划例题选讲.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

1、动态规划例题选讲,刘宸亨,例题1 路径问题,给一个N*M的方格图,从左上角(0,0)走到右下角(N,M),每次只能向右或者向下走,问一共有多少种路径?,例题1 路径问题,用Fij表示从起点走到位置(i,j)时的路径总数,那么转移方程如下: Fij = Fi 1j /从(i-1,j)走过来 + Fij 1 /从(i,j 1)走过来O(NM)的状态数,O(1)的转移,总的时间复杂度为O(NM)。,例题2 路径问题2,给一个N*M的方格图,从左上角(0,0)走到右下角(N,M),每次只能向右、向下或者向右下走,问一共有多少种路径?,例题2 路径问题2,本题较上题来说多了一个走法:向右下走,只需要在转

2、移方程中再加上Fi 1j 1即可。,更多的路径问题,路径问题还有很多变种:诸如:有些格子有障碍不能走,一共有多少种方案?每个格子有一个数字,问走出的最大数字和是多少? 以上问题留作思考题。,例题3 序列问题,给一个长度为N的序列A, 求最大的子段和是多少?例如N = 5A = -1, 2, -3, 4, 5答案为9,即4, 5这一段。,例题3 序列问题,用Fi表示以i结尾的最大子段和,那么有 Fi = Fi 1 + Ai 当Fi 1 + ai 0时 0 当Fi 1 + ai 0时,留下部分和可能导致之后的结果更好,当Fi 1 + ai = 0时,无论之后的和再大,加上一个负数只会令和减小,故舍

3、去。,例题3 序列问题,复杂度分析:状态总数为O(N),O(1)的转移,总的时间复杂度为O(N)。作业:完成poj1050,例题4 最长上升子序列问题,给一个长度为N的序列A,求出其中的最长上升子序列的长度。例如N = 5A = 2, 1, 4, 3, 5答案为3,序列是2, 4, 5, 2, 3, 5, 1, 4, 5, 1, 3, 5,例题4 最长上升子序列问题,用Fi表示以ai结尾的最长上升子序列的长度,那么有 Fi = max Fj + 1, 1 = j i & aj ai 对于状态i来说,它可以接到所有的在它之前的并且比它小的数的后面构成上升子序列,所以我们要枚举状态j进行转移。时间

4、复杂度为O(N2)。,例题4 最长上升子序列问题,有没有更好的做法呢?答案是有的!,例题4 最长上升子序列问题,观察转移方程 Fi = max Fj + 1, 1 = j i & aj = 0 时间复杂度为O(NM)。作业:完成poj3624,例题6 最长公共子序列问题,给两个序列A, B,长度分别是N和M,求他们的最长公共子序列。例如A = 1, 2, 3, 4, 5, B = 1, 4, 3, 5那么它们的最长公共子序列为1, 3, 5,长度是3。,例题6 最长公共子序列问题,令Fij表示第一个序列取1i,第二个序列取1j,它们的最长公共子序列是多少,那么有 Fij = Fi 1j 1 +

5、 1, 当Ai = Bj时 max Fi 1j, Fij 1,其他情况 当Ai = Bj时,那么最长公共子序列为1i-1与1j-1的最长公共子序列加上Ai=Bj这对构成,否则的话要么丢弃Ai要么丢弃Bj。时间复杂度为O(NM)。作业:完成poj1458,Bit-DP,Bit-DP又名集合DP,状态没有先前看到的例题那么直观,通常来说是使用一个二进制数来表示状态,0表示没有,1表示有,或者0表示偶数,1表示奇数。近年来这类题目出现的频率比较大。最显著的特点是当你看到题目数据规模不太大时,可以往这方面想。,例题7 汉密顿路问题,给一个图有N(N = 10)点,aij表示点i到点j的边权,-1表示不

6、能走,问走出的最短的汉密顿路的长度是多少?,例题7 汉密顿路问题,令Fmaski表示当前已经走过的点集为mask,最后一个到达的点为i的最段路径,这里mask是一个N位二进制数,如10101表示点1,3,5是已经走过的,2,4是没有走过的,那么方程转移如下: Fmaski = max Fmaskj + aij 当aij不为-1,且mask等于mask中把i的1置为0,如mask=10101,则所有的mask为00101, 10001, 10100。,例题7 汉密顿路问题,复杂度分析:状态数为O(N * 2N),转移为O(N),总的时间复杂度为O(N2 * 2 N)。作业:完成POJ 2288,

7、例题8 匹配问题,给一张图,adjij为1时表示点i, j之间有边相连,求最大匹配数目。图中点数= 10。,例题8 匹配问题,这题是一个一般图最大基数匹配问题,使用Edmond-Karp算法可以在O(N3)的时间复杂度内求解,但是算法很复杂,而且没有利用到题目点数少的性质。,例题8 匹配问题,在这里我们采取集合DP的方式来求解,令Fmask表示已匹配的点集为mask的最大匹配数,其中mask为2进制数,0表示未匹配,1表示匹配,那么有 Fmask = max Fmask 2i 2j + adjij 其中mask中的第i位和第j为为1。,例题8 匹配问题,复杂度分析:状态数为O(2N),转移为O

8、(N2),总的时间复杂度为O(N2 * 2N)。,例题9 中国邮路问题,给一个图,aij表示点i到点j的距离,一个邮递员从点1开始走,要求每个点至少走一次,并且最后回到起点1,问最小距离为多少?,例题9 中国邮路问题,通过分析我们知道,邮递员走的路径其实是一条欧拉回路,并且权最小。,例题9 中国邮路问题,我们首先看一个简单一点的问题:添加最少的边使得原图中存在欧拉回路。,例题9 中国邮路问题,一个图存在欧拉回路当且仅当它的所有点的度为偶数。有了如上的性质,我们发现:如果度为奇数的点有奇数个,那么问题无解。否则可以两两拿出来匹配即可。,例题9 中国邮路问题,回到本问题,我们首先通过最短路算法求出

9、所有度为奇数的点之间的最短路,设为dij。然后进行集合DP,状态Fmask表示度状态为mask的最小费用,mask是一个二进制数,其中1表示度为奇数,0表示度为偶数,那么有 Fmask = max Fmask - 2i - 2j + dij 其中mask包含i和j,且i和j为奇度点。,例题9 中国邮路问题,显然,最后答案为F0。复杂度分析:状态数为O(2N),转移为O(N2),总的时间复杂度为O(N2 * 2N)。作业:完成poj2404,例题10 两条路径问题,回忆问题1,我们要从左上角走到右下角,走2条不想交的路径(起点终点除外),问有多少种方法。,例题10 两条路径问题,令Fijxy表示第一条路走到了(i,j),第二条路走到了(x,y)的方案数,那么转移方法易得。留作课后思考。复杂度O(NMNM)。,例题10 两条路径问题,其实可以做到更优美,注意到两条路同时走的时候,i+j=x+y,于是可以少记录y,令y=i+j-x即可。复杂度变成O(NMM)。作业:完成http:/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报