网站大量收购闲置独家精品文档,联系QQ:2885784924

2-最长公共子序列问题(无答案).docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最长公共子序列问题(LCS)(生物信息学中常用算法) 子序列的概念: 设X= x1, x2,┅, xm,若有1≤i1 i2 ┅ ik≤m,使得 Z= z1, z2,┅, zk = xi1, xi2,┅, xik,则称Z是X的子序列, 记为ZX。 e.g. X=A,B,C,B,D,A,B, Z=B,C,B,A, 则有ZX。 公共子序列的概念: 设X,Y是两个序列,且有ZX和ZY, 则称Z是X和Y 的公共子序列。 最长公共子序列的概念: 若ZX,ZY,且不存在比Z更长的X和Y 的公共子序列, 则称Z是X和Y 的最长公共子序列,记为Z?LCS(X , Y)。 最长公共子序列往往不止一个。 e.g. X=A,B,C,B,D,A,B, Y=B,D,C,A,B,A, 则 Z=B,C,B,A, Z’=B,C,A,B, Z’’=B,D,A,B 均属于LCS(X , Y) ,即X,Y有3个LCS。 如何找出X和Y的一个最长公共子序列? Brute-force法:列出X的所有长度不超过n(即?Y?)的子序列, 从长到短逐一进行检查,看其是否为Y的子序列, 直到找到第一个最长公共子序列。 由于X共有2m个子序列,故此方法对较大的m没有实用价值。 是否能使用动态规划法?如何用? 分析: 记Xi=﹤x1,…,xi﹥即X序列的前i个字符 (1≤i≤m)(前缀) Yj=﹤y1,…,yj﹥即Y序列的前j个字符 (1≤j≤n)(前缀) 假定Z=﹤z1,…,zk﹥∈LCS(X , Y)。 若xm=yn(最后一个字符相同),则不难用反证法证明: 该字符必是X与Y的任一最长公共子序列Z(设长度为k)的 最后一个字符,即有zk = xm = yn 且显然有Zk-1∈LCS(Xm-1 , Yn-1) 即Z的前缀Zk-1是Xm-1与Yn-1的最长公共子序列。 若xm≠yn,则亦不难用反证法证明: 要么Z∈LCS(Xm-1, Y),要么Z∈LCS(X , Yn-1)。 由于zk≠xm与zk≠yn其中至少有一个必成立,因此: 若zk≠xm则有Z∈LCS(Xm-1 , Y), 若zk≠yn 则有Z∈LCS(X , Yn-1)。 ∴若xm=yn,则问题化归成求Xm-1与Yn-1的LCS (LCS(X , Y)的长度等于LCS(Xm-1 , Yn-1)的长度加1) 若xm≠yn 则问题化归成求Xm-1与Y的LCS及X与Yn-1的LCS LCS(X , Y)的长度为: max{LCS(Xm-1 , Y)的长度, LCS(X , Yn-1)的长度} 求LCS(Xm-1 , Y)的长度与LCS(X , Yn-1)的长度 这两个问题不是相互独立的: ∵两者都需要求LCS(Xm-1,Yn-1)的长度, 因而具有重叠性。 另外两个序列的LCS中包含了两个序列的前缀的LCS, 故问题具有最优子结构性质 考虑用动态规划法。 引进一个二维数组C,用C[i,j]记录Xi与Yj的LCS的长度 如果我们是自底向上进行递推计算,那么在计算C[i,j]之前, C[i-1,j-1], C[i-1,j]与C[i,j-1]均已计算出来。此时我们 根据X[i]=Y[j]还是X[i]?Y[j],就可以计算出C[i,j]: 若X[i]=Y[j],则执行C[i,j]←C[i-1,j-1]+1;若X[i]?Y[j],则根据: 若C[i-1,j]≥C[i,j-1]则C[i,j]取C[i-1,j];否则C[i,j]取C[i,j-1]。即有 C[i,j]= e.g. 如下图: 0 1 2 3 4 5 6 yj B D C A B A 0 xi 0 0 0 0 0 0 0 ↑ ↑ ↑↖ ↖ 1 A 0 ←0 ←0←0 1←1 1 ↖ ↑↖ 2 B 0 1 ←1←1 ←1 2 ←2 ↑ ↑↖ ↑ ↑ 3 C 0 1 ←1 2 ←2←2 ←2 ↖ ↑ ↑ ↑↖ 4 B 0 1 ←1 2 ←2 3 ←3 ↑↖ ↑ ↑ ↑ ↑ 5 D 0 1 2←2 ←2 3 ←3 ↑ ↑ ↑↖ ↑↖ 6 A 0 1 2←2 3←3 4 ↖ ↑ ↑ ↑↖ ↑ 7 B 0 1 2←2 3 4 ←4 为了构造出LCS,使用一个m?n的二维数组b, b[i,j]记录C[i,j]是

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档