1. 子串行
摘自維基百科
在數學中,某個序列的子串行是從最初序列通過去除某些元素但不破壞餘下元素的相對位置而形成的新序列。
例如:令
那麼,以下序列
是2. 最長公共子串行
最長公共子串行問題是尋找兩個或多個已知數列最長的子串行
3. 解題思路
最長公共子串行的性質:
設序列x=和y=的最長公共子串行為z= ,則
(1)若xm=yn,則zk=xm=yn,且是和的最長公共子串行。
(2)若xm≠yn且zk≠xm,則 是和最長公共子串行。
(3)若xm≠yn且zk≠yn,則是和的最長公共子串行。
則可以有如下的遞迴關係:
c[i][j]表示x的第i位和y的第j位之前(包括i和j)的最長公共子串行的個數
因此在求解的時候也分為這三種情況來考慮即可。
最後還要用回溯的方法把最長子串輸出出來,詳細的方法可以參考: 他已經寫得很清楚了。
4. **
//lcs longest common subsequence#include #include #include #define max 100
void lcs(char *x, char *y,int x_len, int y_len, int common_len[max], int b[max])
else if (common_len[i-1][j] >= common_len[i][j-1])
else}}
}void backtrack(int i, int j,int b[max], char *x)
else if(-1 == b[i][j])
else
}int main()
2013/8/8 11:27
動態規劃之最長公共子串行
最長公共子串行簡介 舉例說明並分析 塊測試結果 乙個給定序列的子串行是在該序列中刪去若干元素後得到的序列,確切的說,若給定序列x 則另一串行z x的子串行是指存在乙個嚴格的下標序列,使得對於所有的j 0,1,k 1有zj xij。例如序列z 是序列x 的子串行,相應的遞增下標序列維。最長公共子串行問...
動態規劃之最長公共子串行
給出兩個字串,求出這樣的一 個最長的公共子串行的長度 子串行 中的每個字元都能在兩個原串中找到,而且每個字元的先後順序和原串中的 先後順序一致。sample input abcfbc abfcab programming contest abcd mnp sample output 4 2 0對於動...
動態規劃之最長公共子串行
最長公共子串行問題 time limit 1000 ms memory limit 65536 kib submit statistic discuss problem description 給定兩個序列x input 輸入資料有多組,每組有兩行 每行為乙個長度不超過500的字串 輸入全是大寫英文...