dp 最長公共子串行

2021-07-27 03:45:56 字數 552 閱讀 6373

最長公共子串行的意思就是尋找兩個給定字串的的子串行,該子串行在兩個字串中以相同的次序出現,但是不一定是連續的。(連續的那是子串)

例如序列x=abcbdab,y=bdcaba。序列bca是x和y的乙個公共子串行,但是不是x和y的最長公共子串行,子串行bcba是x和y的乙個lcs,序列bdab也是。

其實最長公共子串行是動態規劃(dp)的典型例子。

設x=1,x2,…,xm>和y=1,y2,…,yn>為兩個字串,lcs(x,y)表示x和y的乙個最長公共子串行,可以看出

如果xm=yn,則lcs ( x,y ) = xm+ lcs ( xm-1,yn-1)。如果xm!=yn,則lcs( x,y )= max  如果x[i-1] != y[i-1]

DP 最長公共子串行

解題報告 題目 演算法 dp 最長公共子串行 思路 最長公共子串行,英文縮寫為lcs longest common subsequence 其定義是,乙個數列 s 如果分別是兩個或多個已知數列的子串行,且是所有符合此條件序列中最長的,則 s 稱為已知序列的最長公共子串行。d i j 表示s1的第i位...

最長公共子串行 DP

有序子串行定義 若x 則它的子串行為y 即原序列調出若干項組成的序列且下標要求有序。lcs 最長公共子串行 定義 給定兩個序列x 和y 存在乙個嚴格遞增的x的下標序列為,對所有的j 1,2,3.k,滿足xi yj,例如x 1 4 3 2 5 y 4 3 5 7 則x和y的最長公共子串行為 4 3 5...

最長公共子串行 DP

最長公共子串行 lcs.pas c cpp 問題描述 乙個給定序列的子串行是在該序列中刪去若干元素後得到的序列。確切地說,若給定序列x x1,x2,xm 則另一串行z z1,z2,zk 是x的子串行是指存在乙個嚴格遞增的下標序列 i1,i2,ik 使得對於所有j 1,2,k有 xij zj 例如,序...