最長公共子序列

最長公共子序列

  最長公共子序列也稱作最長公共子串(不要求連續),英文縮寫爲LCS(Longest Common Substring)。其定義是,一個數列 S ,如果分別是兩個或多個已知數列的子序列,且是所有符合此條件序列中最長的,則 S 稱爲已知序列的最長公共子序列。
  動態規劃的一個計算最長公共子序列的方法如下:
  以兩個序列 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)
發佈了33 篇原創文章 · 獲贊 2 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章