设序列 和 的最长公共子序列为 ,
与 *-&+ 的最长 公共子序 列的长 度为
*&+。
若 或& ,此时为空序列,*&+(边界条件)。
若)*+F*+,则有G*+)*+*+*+ (其中为G*+这一项);
若)*+HF*+,则*+取*+与*+中的最大者。
一般地,若)*+F*&+,则*&+* & + ;
若)*+HF*&+,则*&+)** &+*& ++。
因而归纳为递推关系:
边界条件:*&+( 或& )
()逆推计算最优值
根据以上递推关系,逆推计算最优值*+流程为:
./*-- +#$#$- 33赋初始值
./*&-&-& +#$#&$-
./*0-'-00+ 33计算最优值
./*&0-&'-&00+
.*)#$F#&$+
#$#&$# $#& $ -
7.*#$#& $'# $#&$+
#$#&$#$#& $-
7#$#&$# $#&$-
;8.*<最长公共子串的长度为::<#$#$+- 33输出最优值
以上算法时间复杂度为I*+。
()构造最优解
为 构造 最 优解 , 即具 体 求出 最 长公 共 子 序列 ,设 置 数 组 7*&+, 当 )*+F*&+时
7*&+;当)*+HF*&+时7*&+。
A序列的每一项与D序列的每一项逐一比较,根据7*&+与*&+取值具体构造最长公共子
序列。实施)*+与F*&+比较,其中0-&80;变量8从开始取值,当确
定最长公共子序列一项时,8& 。这样处理可避免重复取项。
若7*&+且*&+*+时,取)*+为最长公共子序列的第项-
随后,若7*&+且*&+*+0时,取)*+最长公共子序列的第项-
一般地,若7*&+且*&+*+0J时*J从开始,每确定最长公共子序列的一项
J增+,取)*+最长公共子序列的第J项。
构造最长公共子序列描述:
./*8J-0- +
./*&8-&0-& +