动态规划:子问题递归与最长公共子序列
需积分: 9 54 浏览量
更新于2024-08-21
收藏 482KB PPT 举报
动态规划是一种在计算机科学中用于解决最优化问题的算法方法,特别适用于那些具有重叠子问题和最优子结构的问题。在这个特定的讲义中,我们关注的是子问题的递归结构在动态规划中的应用,以解决最长公共子序列(Longest Common Subsequence, LCS)问题。
LCS问题是指找到两个序列中最长的共同子序列,而子问题的递归结构则是通过定义一个二维数组c[i][j]来表示序列X={x1, x2, ..., xi}和序列Y={y1, y2, ..., yj}的最长公共子序列的长度。递归结构的关键在于理解两个边界情况:当i或j为0时,由于序列为空,空序列自然是它们的最长公共子序列,所以c[i][j]的值为0。对于其他非边界情况,根据最优子结构性质,即子问题的最优解可以通过较小规模子问题的最优解组合得出,可以建立如下的递归关系:
c[i][j] =
- 如果 xi = yj,则c[i][j] = c[i-1][j-1] + 1(因为当前元素相同,子序列长度加1)
- 否则,c[i][j] = max(c[i-1][j], c[i][j-1]) (取不包含当前元素的最长子序列)
举例来说,对于给定的两个序列A和B,动态规划过程会填充一个二维表,每一步比较当前元素是否匹配,然后根据最优子结构选择保留当前元素或不保留,以求得最大公共子序列的长度。在填表过程中,不仅记录了长度,还间接地找到了最长公共子序列的具体序列。
此外,讲义还提到了0-1背包问题,这是另一个典型的动态规划问题。在0-1背包问题中,目标是在给定的背包容量限制下,选择物品以最大化总价值。同样利用最优子结构,我们可以建立一个递归公式来计算背包容量为j时,前i个物品能装入背包的最大价值m(i, j)。
这个讲义深入剖析了如何通过子问题的递归结构和动态规划的思想来解决LCS问题以及0-1背包问题,展示了动态规划算法的强大实用性。理解和掌握这些递归关系和方法,是学习和运用动态规划解决问题的基础。
2011-02-20 上传
2009-11-27 上传
2011-07-01 上传
2018-12-06 上传
2007-10-07 上传
2009-08-24 上传
2009-11-27 上传
2008-09-15 上传
2021-04-10 上传
条之
- 粉丝: 27
- 资源: 2万+
最新资源
- cumpositiontyp,c语言聊天软件源码详解,c语言
- 1click Paintbrush-crx插件
- private_party
- tiffread2.m:读取 tiff 文件,包括带有信息的堆栈-matlab开发
- yipay:易支付
- pdi-ce-9.5.0.1-261.zip
- bond-cni:Bond-cni用于实现云编排中的故障转移和网络的高可用性
- 软硬
- 猫和老鼠主题的简单网页(HTML+CSS)
- ASO –适用于初学者的应用商店优化
- 940383,c语言的源码不能跨平台,c语言
- 互联网IT科技互联网站模板
- node_mysql_retrogaming:一个带有NodeJS,Express和MySQL的附带项目
- project_code_print:打印源代码到word文档里面,方便纸质阅读。简易树形图,压缩代码行间距,尽量节省纸张
- 社交媒体策略:在获得客户的Facebook和Twitter帐户访问权限并从其帖子下载参与度指标后,为其创建了社交媒体策略。 步骤包括数据清理和新变量的特征工程,将每个帖子分类为不同的主题,创建视觉效果,自然语言处理和回归分析,所有这些操作均使用Python完成
- MinecraftChat:基于Minecraft的网络聊天客户端