动态规划的基本原理:
在字母表上,分别给出两个长度为n和m的字符串A和B,这里A= … 的子序列是一个形式为 … 的字符串,其中每个 都在1和n之间。
例如 ={x,y,z},A=zxyxyz,B=xyyzx那么xyy同时是A和B的长度是3的子序列。然而。它不是A和B的最长的公共子序列,因为字符串xyyx也是A和B的公共的子序列。因此A和B的最长公共子序列的长度是4。
最后得到结论:
如果i和j都大于0,那么
- 若 = , L[i,j]=L[i-1,j-1]+1;
- 若 != , L[I,j]=max{L[i-1,],L[I,j-1]}
问题描述及实验内容
假设A=”xyxxzxyzxy”和B=”zxzyyzxxyxxz”,求出A和B的最长公共子序列的长度并输出其中一个最长公共子序列。
最后求得L[n,m]=6和最长子序列为xyxxxz
问题分析和算法描述
LCS的算法表示:
输入:字母表上的两个字符串A和B,长度分别为n和m.
输出:A和B的最长公共子序列的长度和其中一个最长子序列。
for i=1 to n
L[i,0]=0
end for
for j=0 to m
L[0,j]=0
end for
for i=1 to n
for j=1 to m
if = then L[i,j]=L[i-1,j-1]+1
else L[I,j]=max{L[i-1,],L[I,j-1]}
end if
end for
end for