動態規劃解最大公共子串

2022-08-04 07:24:10 字數 657 閱讀 6070

子串是連續的

一:刻畫最優解結構特徵

用c[i,j]表示以a[i],b[j]結尾的最大公共子串中的字元數。則max(c[i,j]) (0<=i<=len(a)-1, 0<=j<=len(b)-1)表示a和b最大公共子串的字元數。同時在求解過程中可以確定i和j,這樣也就確定了這個公共子串。

二:遞迴定義最優解的值

c[i,j]=c[i-1,j-1]+1, (a[i] = b[j])

c[i,j] = 0, (a[i]<>b[j])

三:自底向上的方法

i和j遞增

四:構造最優解

確定i,j和c[i,j],也就能反推出最大公共子串

**如下:

#include

using namespace std;

#define max(x,y) ((x)>(y)?(x):(y))

int main()

;int b[10] = ;

int c[5][10];

memset(&c, 0, sizeof(c));

int q = -1;

for(int i = 0; i<5; i++)

else

q = max(q,c[i][j]);     }}

cout

}

1 8 動態規劃之最大公共子串問題。

給定兩個字串,str1 str2,求返回倆字串最長公共子串。分析 1 本題與求最長公共子串行相似,但又有所不同。在求子序列問題中,動態規劃通式i j位置的值取決於三個位置,dp i 1 j 1 dp i 1 j dp i j 1 三者中,2 先假設最後乙個字元相等,納入最長子序列中,那麼如果只改變乙...

最大公共子串行,最大公共子串,最大回文子串

1 兩個字串中最長公共子串行 該問題是動態規劃的經典問題,找出的公共序列不一定是連續的,參考資料很多,這裡就貼出公式和 做個簡單的筆記。設序列a,b的長度分別為n和m,l i,j 為a i b j 的最長公共子串行長度,有遞推公式 時間複雜度為o mn 如下 define n 50 intlcs c...

動態規劃查詢最大公共子串行

使用二維陣列c m,n c i,j 記錄序列xi和yj的最長公共子串行的長度 當i 0或j 0時,空序列是xi和yj的最長公共子串行,故c i,j 0 以上x和y進行一 一對比,a和b不相等,則比較它的左邊那個數和上邊那個數他們兩誰大 a和d比較,不相等,同理 直達a和a相比,相等,則它的左上角那個...