LCS 最長公共子串行問題

2022-07-17 10:00:12 字數 688 閱讀 6777

lcs(longest common subsequence),即最長公共子串行。乙個序列,如果是兩個或多個已知序列的子串行,且是所有子串行中最長的,則為最長公共子串行。

原理:

事實上,最長公共子串行問題也有最優子結構性質。然後,用動態規劃的方法找到狀態轉換方程。

記:xi=﹤x1,⋯,xi﹥即x序列的前i個字元 (1≤i≤m)(字首)

yj=﹤y1,⋯,yj﹥即y序列的前j個字元 (1≤j≤n)(字首)

假定z=﹤z1,⋯,zk﹥∈lcs(x , y)。

由於上述當xm≠yn的情況中,求lcs(xm-1 , y)的長度與lcs(x , yn-1)的長度,這兩個問題不是相互獨立的:兩者都需要求lcs(xm-1,yn-1)的長度。另外兩個序列的lcs中包含了兩個序列的字首的lcs,故問題具有最優子結構性質考慮用動態規劃法。

public static int lcs(string x,string y)    

else

z[i][j]=z[i-1][j] > z[i][j-1] ?z[i-1][j]:z[i][j-1];

}

}

return z[x.length()][y.length()];

}

最長公共子串行(LCS)問題

問題描述 見演算法導論p208 p209 前提概念 給定乙個序列x x1,x2,xm 對i 0,1,m,記x的第i個字首為xi x1,x2,xi 故xm x,而x0是個空序列 乙個給定序列的子串行就是該序列去掉0個或多個元素 不一定連續 如bcdb是abcbdab的乙個子串行 基於以上定義,最長公共...

最長公共子串行問題LCS

乙個給定序列的子串行是指在原序列順序不變的基礎上刪去若干元素後得到的序列。給定兩個序列x和y,當乙個序列z既是x的子串行又是y的子串行時,稱z序列為x和y 的公共子串行。例如,x a,b,c,b,d,a,b y b,d,c,a,b,a 則序列 b,c,a 是x和y的乙個公共子串行,但不是x和y的最長...

最長公共子串行 LCS 問題

前言 學習過的知識,只要不經常使用就會忘記,所以在此寫部落格,記錄下來,方便自己,也可能有利於他人。最長公共子串行 lcs 問題。1.什麼是最長公共子串行?最長公共子串行,英文縮寫為lcs longest common subsequence 其定義是,乙個序列 s 如果分別是兩個或多個已知序列的子...