LCS最长子序列匹配算法讲解.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最长公共子序列( 首先将要看到如何运用动态编程查找两个 DNA 序列的 longest common , ) subsequence LCS 。发现了新的基因序列的生物学家通常想知道该基因序列与其他哪个 序列最相似。查找 LCS 是计算两个序列相似程度的一种方法:LCS 越长,两个序列越相 似。 子序列中的字符与子字符串中的字符不同,它们不需要是连续的。例如,ACE 是 ABCDE 的 子序列,但不是它的子字符串。请看下面两个 DNA 序列:  S1 = DEGCCCTAGCGDE  S2 = DEGCGCAATGDE 一个 唯一的 这两个序列的 LCS 是 GCCAG。(请注意,这仅是 LCS,而不是 LCS,因为 可能存在其他长度相同的公共子序列。这种最优化问题和其他最优化问题的解可能不止一 个。) LCS 算法 首先,考虑如何递归地计算 LCS。令:  C1 是 S1 最右侧的字符  C2 是 S2 最右侧的字符  S1 是 S1 中 “切掉” C1 的部分  S2 是 S2 中 “切掉” C2 的部分 有三个递归子问题:  L1 = LCS(S1, S2)  L2 = LCS(S1, S2)  L3 = LCS(S1, S2) 结果表明(而且很容易使人相信)原始问题的解就是下面三个子序列中最长的一个:  L1  L2  如果 C1 等于 C2,则为 L3 后端加上 C1 ,如果 C1 不等于 C2,则为 L3。 (基线条件(base case)是 S1 或 S2 为长度为零的字符串的情形。在这种情况下,S1 和 S2 的 LCS 显然是长度为零的字符串。) 但是,就像计算斐波纳契数的递归过程一样,这个递归解需要多次计算相同的子问题。可以 证明,这种递归解法需要耗费指数级的时间。相比之下,这一问题的动态编程解法的运行时 间是 Θ(mn),其中 m 和 n 分别是两个序列的长度。 为了用动态编程有效地计算 LCS,首先需要构建一个表格,用它保存部分结果。沿着顶部 列出一个序列,再沿着左侧从上到下列出另一个序列,如图 2 所示: 图 2. 初始 LCS 表格 这种方法的思路是:将从上向下、从左到右填充表格,每个单元格包含一个数字,代表该行 和该列之前的两个字符串的LCS 的长度。也就是说,每个单元格包含原始问题的一个字问 题的解。例如,请看第 6 行第 7 列的单元格:它在 GCGCAATG 序列第二个 C 的右侧, 在 GCCCTAGCG 的 T 的下面。这个单元格最终包含的数字就是GCGC 和 GCCCT 的 LCS 的长度。 首先看一下表格的第二行中应该是什么条目。这一行的单元格保存的 LCS 长度对应的是序 列 GCGCAATA 的零长前端和序列 GCCCTAGCG 的 LCS。显然,这些 LCS 的值都是 0。类似的,沿着第二列向下的值也都是0,这与递归解的基线条件对应。现在表格如图3 所示: 图 3.填充了基线条件的 LCS 表格 接下来,要实现与递归算法中递归子问题对应的情景,但这时使用的是表格中已经填充的值。 在图 4 中,我已经填充了一半左右的单元格: 图 4.填充了一半的 LCS 表格 在填充单元格时,需要考虑以下条件:  它左侧的单元格  它上面的单元格  它左上侧的单元格 下面三个值分别对应着我在前面列出的三个递归子问题返回的值。  V1 = 左侧单元格的值  V2 = 上面单元格的值  V3 = 左上侧单元格的值 在空单元格中填充下面 3 个数字中的最大值:  V1  V2  如果 C1 等于 C2 则为 V3 + 1 ,如果 C1 不等于 C2,则为 V3 ,其中 C1 是 当前单元格

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档