- 1、本文档共47页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《算法艺术与信息学竞赛》标准课件 动态规划(一): 经典问题 刘汝佳 目录 一、最长公共子序列O(mn) 二、最优排序二叉树O(n3) 三、最长上升子序列O(nlogn) 四、最优三角剖分O(n3) 五、最大m子段和O(mn) 六、0-1背包问题O(min{nc, 2n, n1.44n}) 一、最长公共子序列 Longest Common Subsequence(LCS) 分析 考虑前缀x[1..i]和y[1..j], 定义 c[i,j] = |LCS(x[1..i], y[1..j])| 则c[m,n] = |LCS(x, y)|. 递推公式为 很直观. 考虑x[i]=y[j]的情形: 关键点一: 最优子结构 为了使用动态规划, 问题需具备最优子结构(Optimal Substructure) 直接书写的程序 递归树分析 关键点二: 重叠子问题 为了让动态规划确实发挥功效, 问题应该包含尽量多的重叠子问题(overlapping subproblems) 解决方法: 记忆化 注意memoization不是memorization 自底向上递推 空间优化 如果只需要最优值, 可以用滚动数组实现 按照i递增的顺序计算, d[i,j]只和d[i-1,j]和d[i,j-1]以及d[i-1,j-1]有关系,因此只需要保留相邻两行, 空间复杂度为O(min{m,n}) 更进一步的, 可以只保留一行, 每次用单独的变量x保留d[i-1,j], 则递推方程为 If(i==j) d[j]=x; else { x = d[j]; d[j]=max{d[j-1], d[j]} }; 变形. 回文词 给一个字符串a, 保持原字符的顺序不变, 至少要加几个字符才能变成回文词? 例: abfcbfa ? afbcfcbfa 分析 红、绿色表示原字符, 白色为新增字符 显然, s和s’在任何一个位置不可能都是白色(不需要加那个字符!) 应该让红色字符尽量多! 相当于求s和逆序串s’的LCS, 让LCS中的对应字符(红色)对齐, 中间的每个绿色字符都增加一个字符和它相等 二、最优排序二叉树 给n个关键码和它们的频率,构造让期望比较次数最小的排序二叉树 分析 定理:最优排序二叉树的子树也是最优排序二叉树 给出关键码-频率对照表(升序排列) 问题:把哪个关键码做为根?则左右子树可以递归往下做 分析 用递归来思考,但用递推来做 先考虑两个结点的情形 分析 可以用矩阵来保存结果 C[j,k]表示从j到k的关键码组成的最优排序二叉树 Root[j,k]记录这棵排序二叉树的根 分析 考虑三个结点的情形 最优值放在C[B,D]中,根放在root[B,D]中 分析 类似地,更新所有C[j-2,j]和root[j-2,j] 分析 四个结点的情形(如A-D) 分析 最终计算结果为 分析 可以利用root矩阵递归地构造出最优树 分析 时间复杂度:计算每个C[i,j]和root[i,j]需要枚举根结点,故为O(n3) 空间复杂度:需要两个n*n矩阵,O(n2) 三、最长上升子序列 最长上升子序列问题(LIS)给一个序列,求它的一个递增子序列,使它的元素个数尽量多。例如序列1,6,2,5,4,7的最长上升子序列是1,2,5,7(还有其他的,这里略去) 分析 定义d[i]是从第1个元素到第i个元素为止的最长子序列长度, 则状态转移方程为 直接使用这个方程得到的是O(n2)算法 下面把它优化到O(nlogn) 状态的组织 d值相同的a值只需要保留最小的, 因此用数组g[i]表示d值为i的数的a最小值, 显然 g[1]=g[2]=…=g[k] 计算d[i]: 需要在g中找到大于等于a[i]的第一个数j, 则d[i]=j 更新g: 由于g[j]a[i], 需要更新g[j]=a[i] 代码 使用STL的lower_bound可以直接求出比a[i]大的第一个数, 用二分查找实现, 每次转移时间O(logn), 总时间O(nlogn) 变形1: 航线问题 有两行点, 每行n个. 第一行点和第二行点是一一对应的, 有线连接, 如下图所示 选择尽量多的线, 两两不交叉 分析 设与第1行第i个点对应的是第2行第f[i]个点 假设ij, 两条线(i, f[i])和(j, f[j])的充要条件是f[i]f[j], 因此问题变成了 求f的最长上升子序列 时间复杂度为O(nlogn) 变形2: 两排列的LCS 给1~n的两个排列p1, p2 求p1和p2的最长公共子序列 例: 1 5 3 2 4 ? 5 3 4 2 1 分析 算法一: 直接套用LCS算法, 时间O(n2) 算法二: 注意到把两个排列做相同的置换, LCS不变, 可以先把p1排列为1,2,3…,n 1 5 3 2 4 ? 1
您可能关注的文档
- [如何掌控自己的时间及生活]目录.PDF
- 《3-6岁儿童学习和发展指南》概述.ppt
- 《爱情底线》作者小第一卷爱怎样开始和结束.PDF
- 《板块式校本综合实践活动开发和实施》方案.doc
- 《备品备件需求预测、库存控制和仓储管理操作实务》.doc
- 爱,和我们同行.PDF
- 爱德华氏菌与鱼类爱德华氏菌病(综述).PDF
- 《标志和CI设计》.doc
- 氨基泡塑的合成与其应用于富集地质样品中的痕量金.PDF
- 氨溴索对呼吸系统的保护机制与临床应用.PDF
- 专题06 经济体制(我国的社会主义市场经济体制)-五年(2020-2024)高考政治真题分类汇编(解析版).docx
- 专题11 世界多极化与经济全球化-5年(2020-2024)高考1年模拟政治真题分类汇编(解析版).docx
- 专题03 经济发展与社会进步-5年(2020-2024)高考1年模拟政治真题分类汇编(浙江专用)(解析版).docx
- 专题09 文化传承与文化创新-5年(2020-2024)高考1年模拟政治真题分类汇编(北京专用)(原卷版).docx
- 5年(2020-2024)高考政治真题分类汇编专题08 社会进步(我国的个人收入分配与社会保障)(原卷版).docx
- 专题07 探索世界与把握规律-5年(2020-2024)高考1年模拟政治真题分类汇编(解析版).docx
- 5年(2020-2024)高考政治真题分类汇编专题06 经济体制(我国的社会主义市场经济体制)(原卷版).docx
- 专题11 全面依法治国(治国理政的基本方式、法治中国建设、全面推进依法治国的基本要求)-五年(2020-2024)高考政治真题分类汇编(解析版).docx
- 专题17 区域联系与区域协调发展-【好题汇编】十年(2015-2024)高考地理真题分类汇编(解析版).docx
- 专题01 中国特色社会主义-5年(2020-2024)高考1年模拟政治真题分类汇编(原卷版).docx
最近下载
- NB_T 31083-2016风电场控制系统功能规范.pdf
- 德兴隆_PVC胶粒_A2190072365101001_2019.4.11_REACH检测报告英文版.pdf VIP
- 输液港植入术术后护理.pptx VIP
- 血液系统疾病(西安交通大学)中国大学MOOC慕课章节测验答案(课程ID:1462060167).pdf
- GB 1499.2-2024 钢筋混凝土用钢 第2部分:热轧带肋钢筋.pdf
- 征信简版电子版PDF个人信用报告必威体育精装版版2024年可编辑带水印模板.pdf
- 《高中64篇必考古诗文》.doc VIP
- Rota润唐 RTBR-601馒头面包机 馒头魔法盒说明书用户手册.pdf
- 《洋流》教学设计-优秀教案.docx
- 新人音版高中音乐必修“音乐鉴赏”《高山流水志家国——流水》说课稿.doc
文档评论(0)