演算法 最長公共子串行LCS

2021-06-21 14:37:38 字數 439 閱讀 6460

演算法 最長公共子串行

子串行的定義:

如果z是a的子串行,則a中包含z的所有排列元素,且這些元素在各自排列中的順序是一致的

例如z=,a=

最優子結構

設c是lcs的長度

則if(i==0||j==0)

c[i,j]=0;

else

if(x[i]==y[j])

c[i,j]=c[i-1,j-1]+1;

else

if(x[i]!=y[j])

c[i,j]=max(c[i,j-1],c[i-1,j]);

計算lcs的length基本演算法:

for(int i=0;i

從sl,tl即**中最後乙個,判斷是c[i-1][j-1],c[i-1][j],c[i][j-1]中哪乙個得出,依次得到lcs串的逆序,然後再reverse即可得到結果

最長公共子串行LCS演算法

思路 對所有子問題s1 1 i 和s2 1 j 進行求解。s1 1 i 表示1 i範圍的s1子串,s2 1 j 表示1 j範圍的s2子串。舉例 define n1 8 define n2 9 int s1 n1 1 int s2 n2 1 其所有子問題如下 s1 1 1 s2 1 1 求其最長公共子...

LCS演算法最長公共子串行

問題 求解x和y的最長公共子串行 解析先處理序列的前 公式 個元素組成的子串行,然後再依次往上加後面的元素。即,用 公式 表示序列1和序列2前 公式 個元素的lcs長度,然後將 公式 用 公式 至 公式 表示。但是這個拆分有個問題 序列1和序列2的長度可能不等。這個問題很好解決,我們可以在較短序列的...

LCS 最長公共子串行

問題描述 我們稱序列z z1,z2,zk 是序列x x1,x2,xm 的子串行當且僅當存在嚴格上 公升的序列 i1,i2,ik 使得對 j 1,2,k,有 xij zj。比如z a,b,f,c 是 x a,b,c,f,b,c 的子串行。現在給出兩個序列 x和 y,你的任務是找到 x和 y的最大公共子...