最長公共子串行演算法(LCS)及最長公共子串求法

2021-10-05 20:42:44 字數 1096 閱讀 6221

最長公共子串行演算法c++實現**:

string lcs(string s1,string s2) 

int m = s1.length()+1;

int n = s2.length()+1;

//動態二維陣列的定義方法

int** lcs = new int*[m];

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

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

} //生成lcs陣列

for (int i = 1; i < m; i++)

else

}} //取出最長子序列(注意取值範圍加一會多出乙個/0)

int i = m - 1;

int j = n - 1;

string ss = "";

while (i != 0 && j != 0)

else

else

}} //倒置

reverse(ss.begin(),ss.end());

return ss;

}

最長公共子串求法c++實現**:

string res(string s1,string s2) 

int m = s1.length() + 1;

int n = s2.length() + 1;

//動態二維陣列的定義方法

int** res = new int*[m];

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

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

} //生成res陣列

int row = 0, col = 0, max = 0;

for (int i = 1; i < m; i++)

}else

}} //取出最長子串

int i = row;

int j = col;

string ss = s1.substr(row - max, max);

return ss;

}

演算法 最長公共子串行LCS

演算法 最長公共子串行 子串行的定義 如果z是a的子串行,則a中包含z的所有排列元素,且這些元素在各自排列中的順序是一致的 例如z a 最優子結構 設c是lcs的長度 則if i 0 j 0 c i,j 0 else if x i y j c i,j c i 1,j 1 1 else if x i ...

最長公共子串行LCS演算法

思路 對所有子問題s1 1 i 和s2 1 j 進行求解。s1 1 i 表示1 i範圍的s1子串,s2 1 j 表示1 j範圍的s2子串。舉例 define n1 8 define n2 9 int s1 n1 1 int s2 n2 1 其所有子問題如下 s1 1 1 s2 1 1 求其最長公共子...

LCS演算法最長公共子串行

問題 求解x和y的最長公共子串行 解析先處理序列的前 公式 個元素組成的子串行,然後再依次往上加後面的元素。即,用 公式 表示序列1和序列2前 公式 個元素的lcs長度,然後將 公式 用 公式 至 公式 表示。但是這個拆分有個問題 序列1和序列2的長度可能不等。這個問題很好解決,我們可以在較短序列的...