给定两个序列X和Y,根据动态规划的思想求X和Y的最长公共子序列写出代码
时间: 2024-11-25 12:12:59 浏览: 60
在Python中,我们可以使用动态规划算法来找到两个序列`X`和`Y`的最长公共子序列(LCS)。以下是使用二维数组实现的典型代码:
```python
def longest_common_subsequence(X, Y):
# 初始化一个矩阵 m 的大小为 (len(X) + 1) x (len(Y) + 1)
m = [[0] * (len(Y) + 1) for _ in range(len(X) + 1)]
# 遍历矩阵,填充值
for i in range(1, len(X) + 1):
for j in range(1, len(Y) + 1):
# 如果当前字符匹配
if X[i - 1] == Y[j - 1]:
m[i][j] = m[i - 1][j - 1] + 1
else:
# 否则取两个子问题的最大值
m[i][j] = max(m[i - 1][j], m[i][j - 1])
# 最终的 LCS 长度就是右下角元素的值
lcs_length = m[len(X)][len(Y)]
# 从最后一行倒序回溯,构建LCS
lcs = []
i, j = len(X), len(Y)
while i > 0 and j > 0:
if X[i - 1] == Y[j - 1]:
lcs.append(X[i - 1])
i -= 1
j -= 1
elif m[i - 1][j] > m[i][j - 1]:
i -= 1
else:
j -= 1
# 反转lcs,因为我们在过程中是从左到右填充的
lcs.reverse()
return lcs, lcs_length
# 测试示例
X = "ABCDGH"
Y = "AEDFHR"
lcs, length = longest_common_subsequence(X, Y)
print(f"Longest Common Subsequence: {lcs}")
print(f"Length: {length}")
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)