序列str1和序列str2
長度分別為m和n;
建立1個二維陣列str[m][n]來儲存結果,並初始化為0;
m和n分別從0開始,m++,n++迴圈:
(預設字串均不為空)
如果str1[m] == str2[n],則l[m,n] = l[m - 1, n -1] + 1;
如果str1[m] != str2[n],則l[m,n] = max
最後從l[m,n]中的數字一定是最大的,且這個數字就是最長公共子串行的長度
#include#include#includeusing namespace std;
int main()
}printf("%d\n",str[length1][length2]);
}return 0;
}
最長公共子串行 動態規劃
經常會遇到複雜問題不能簡單地分解成幾個子問題,而會分解出一系列的子問題。簡單地採用把大問題分解成子問題,並綜合子問題的解匯出大問題的解的方法,問題求解耗時會按問題規模呈冪級數增加。為了節約重複求相同子問題的時間,引入乙個陣列,不管它們是否對最終解有用,把所有子問題的解存於該陣列中,這就是動態規劃法所...
最長公共子串行 動態規劃
關於用動態規劃法求兩個序列的最長公共子串行問題的相關知識見 王曉東 計算機演算法設計與分析 第三章。注意,這裡所指的最長公共子串行是可以不相鄰的,與平常所說的最長公共子串 相鄰的 不一樣。直接上 lcs.h ifndef lcs h define lcs h class lcstring endif...
最長公共子串行(動態規劃)
定義 乙個數列 如果分別是兩個或多個已知數列的子串行,且是所有符合此條件序列中最長的,則 稱為已知序列的最長公共子串行。考慮最長公共子串行問題如何分解成子問題,設a a0,a1,am 1 b b0,b1,bm 1 並z z0,z1,zk 1 為它們的最長公共子串行。不難證明有以下性質 1 如果am ...