- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最长公共子串问题 最长公共子串问题(Longest common substring, 简称LCS) [问题描述]一个字符串的某个子串,就是结定的字符串再去掉几个元素(可能一个也不去掉)。 形式化地,结定字符串X=Xl,X2,…,Xm,和另一字符串Z=Zl,Z2,… ,Zk,如果存在X的一个严格递增的下标序列i1, i2, …, ik,使得对所有的J = 1, 2, …, k ,有 分析 描述LCS问题最优解的结构 首先.我们给出一个字符串“前缀”的概念: 给定一个字符串X=X1, X2, …, Xm,对I= 0, 1, …, m,定义X的第i个前缀为 例如,如果X=<A,B,C,B,D,A,B>,则 而 则为空串。 两个输入字符串X和Y的所有前缀组成了LCS问题的子问题空间。由此我们发现LCS问题的最优子结构的三个性质: 设X=X1, X2, …, Xm和Y=Y1, Y2, …, Yn为两个输入字符串,并设X和Y的最长公共子串为Z=Z1, Z2, …, Zk 性质1:如果Xm = Yn,则Zk = Xm = Yn,且 分析 举例说明: X = A, B, E, …, G, F Y= C, D, H, …, K, F 因X和Y的最后一位相等,则它们的最长公共子串Z的最后一位必为F,即有 Z = ……, F的样式。并且 Z’=……是X’=A, B, E, …,G 和Y’=C,D,H, …,K的最长公共子串。 性质2: 分析-最优子结构 性质3: 递归地定义LCS的值 由LCS问题的最优子结构的三个性质可知,要求X=X1, X2, …, Xm和Y=Y1, Y2, …, Yn 的一个LCS,可能要检查如下子问题: 1.若Xm=Yn,我们就要找出 递归地定义LCS的值 用实例来说明上述查找过程。 设X=<A,B,C,B>,Y=<B,D,C> 1) X4 = B, Y3=C , X4 Y3,因此转而求“ X’=A,B,C与Y的LCS” 和 “Y’= B,D与X的LCS”。谁长谁就是X和Y的LCS。 2a) X=A,B,C, Y=B,D,C, X3=Y3, 因此转而求X=A,B与Y=B,D的LCS。 2b) X=A,B,C,B, Y=B,D, X4Y2, 因此转而求X=A,B,C与Y=B,D 和 X=A,B,C,B与Y=B的LCS。 3a) X=A,B, Y= B,D, X2Y2, 因此转而求A与B,D 和A,B与B的LCS。 3b1)X=A,B,C, Y=B,D, X3Y2, 因此转而求A,B,C与B的LCS和A,B与B,D的LCS 3b2) X=A,B,C,B, Y=B, X4=Y1, 转而求 A,B,C与的LCS。在下一次计算中,就会遇到A,B,C与。显然,一个字符串与一个空串的公共子串仍是一个空串,长度为0。因此X=A,B,C,B, Y=B的LCS为B,长度为1 4a)同理, A与B,D 的LCS为; A,B与B的LCS为B, 因此A,B与B,D的LCS为B 4b)因A,B,C与B的LCS为B; A,B与B,D的LCS为B 故A,B,C,B与B,D的LCS为B 5a)因此A,B与B,D的LCS为B 故A,B,C与B,D,C的LCS为B,C 6) 因A,B,C与B,D,C的LCS为B,C; A,B,C,B与B,D的LCS为B 故 A,B,C,B与B,D,C的LCS为B,C 递归地定义LCS的值 设C[I,J]为字符串X和Y的最长公共子串的长度。X的长度为I,Y的长度为J。若I=0或者J=0,也就是说两个字符串之一的长度为0,当前LCS的长度值也必为0。由LCS问题的最优子结构可得递归式: 自底向上求LCS的值 我们看到C[I,J]由两个自变量构成,I表示X的长度,J表示Y的长度。那么选择哪一个作为阶段变量更好呢?由于两个字符串在性质上没有区别,因此选择哪一个作阶段变量都无所谓。为简单计,不妨取I作为阶段变量。 因此阶段变量k的值范围是:1=k=I. 阶段k表示求X的第k个前缀X’k与Y的最长公共子串。 自底向上求LCS的值 状态数: 字符串Y有长度分别为1,2,…,J的前缀字符串。这些前缀字符串与字符串X’k可以产生多少种组合呢? 应该是J种,每种组合就会得到一个LCS,就是一个状态。 因此状态数为J。状态变量的取值范围为1=m=J 自底向上求LCS的值 决策数: 根据前面讨论的LCS的三个性质,我们可以作如下的决策: if X[k] = Y[m] then C[k , m] := C[k-1, m-1] + 1 else begin if C[k-1, m] C[k, m-1] then C[k,
文档评论(0)