最長公共子序列
動態規劃的一個計算最長公共子序列的方法如下:
以兩個序列 X、Y 爲例子:
設有二維數組 f[i,j] 表示 X 的 i 位和 Y 的 j 位之前的最長公共子序列的長度,則有:
f[1][1] = same(1,1);
f[i,j] = max{f[i-1][j − 1] + same(i,j),f[i-1,j],f[i,j−1]}
其中,same(a,b)當 X 的第 a 位與 Y 的第 b 位完全相同時爲“1”,否則爲“0”。
此時,f[j]中最大的數便是 X 和 Y 的最長公共子序列的長度,依據該數組回溯,便可找出最長公共子序列。
該算法的空間、時間複雜度均爲O(n^2)