最長子序列LCS演算法

2021-10-07 03:24:36 字數 645 閱讀 9557

問題描述:給定兩個序列x,y,求這兩個序列的最長公共子串行;

主要思想:動態規劃

解析:子串行:即序列中,下標按照嚴格遞減所形成的序列即為子串行,

比如 x ,那麼 acb也是該序列的子串行

子串行可以有很多,但是最長子序列的長度是應該唯一的。

推論:1:如果xi=yj,那麼zk=xi=yj,則zk-1=xi-1+yj-1

2:如果xi !=yj,且zk != xi,則zk是xi-1與yj的最長公共子串行

3:如果xi !=yj,且zk !=yj,則zk是xi與yj-1的最長公共子串行

設:x=n=5

y=m=4

求這兩個序列的最長子序列

c[i][j] 1<=i<=n 1<=j<=m

b[i][j] ,記錄狀態

偽**設計:

演算法一:給出演算法的最長子序列的長度

for i->n:

for j->m:

if x[i]

==y[j]

: c[i]

[j]=c[x-1]

[y-1]+

1;else

: c[i]

[j]=max

;

最長子序列

最長子序列可以說是剛接觸動態規劃的人經常遇見也不得不解決的問題,最常見的有兩種,一種是最長公共子串行 lcs 還有乙個是最長上公升子串行 lis 今天我就總結下這兩個的做法。一 最長公共子串行 lcs 題目描述 給你兩個陣列,可以是數字的,也可以是字串,我們假設是數字的!舉個例子 x 1,5,6,4...

最長子序列

在做oj題目的時候,經常會用到字串的處理。例如,比較二個字串相似度。這篇文章介紹一下求兩個字串的最長公共子串行。乙個字串的子串行,是指從該字串中去掉任意多個字元後剩下的字元在不改變順序的情況下組成的新字串。最長公共子串行,是指多個字串可具有的長度最大的公共的子串行。include includech...

最長子序列

題 給定乙個長度為n的陣列,找出乙個最長的單調自增子序列 不一定連續,但是順序不能亂 例如 給定乙個長度為8的陣列a,則其最長的單調遞增子串行為,長度為6。思路1 第一眼看到題目,很多人肯定第一時間想到的是lcs。先給陣列排個序形成新陣列,然後再把新陣列和原陣列拿來求lcs,即可得到答案。這種解法很...