递归解决最长公共子序列问题(LCS)
来源:互联网 发布:飞鸽传书网络连接失败 编辑:程序博客网 时间:2024/06/09 16:12
如何用递归解决LCS(最长公共子序列)?
什么是最长公共子序列?
PS.借用了邓俊辉老师的PPT图
主要使用两种策略,也是递归中最重要的两种思想
1.减而治之
2.分而治之
现在来看一个例子
A序列: didacticA , A[0, m]
B序列: advantA, B[0, n]
求这两个序列的最长公共子序列,显而意见,这个序列是datA
那么用程序如何解决这个问题呢?
LCS[m, n] 无非三种情况
1.m == -1 || n == -1 则取空序列"", 也就是递归基
2.A[m] == A[n] 则取LCS(m-1, n-1)+1, 因为最后一个字符相同 我们加上1 然后截去这个字符把剩下的两个串继续比较,也就是减而治之的策略
3.A[m] != A[n], 这时候
我们将一个问题转化为两个子问题继续求解,这就是分而治之的思想
贴出最终解决代码
#include<iostream>
using namespace std;
string a, b;
int LCS(int m, int n) {
if(m == -1 || n == -1) return 0;
if(a[m] == b[n]) return LCS(m-1, n-1)+1;
if(a[m] != b[n]) return LCS(m, n-1) > LCS(m-1, n)?LCS(m, n-1):LCS(m-1, n);
}
int main() {
int t;
cin >> t;
while(t--) {
cin >> a >> b;
cout << LCS(a.size()-1, b.size()-1) << endl;
}
}
阅读全文
0 0
- 递归解决最长公共子序列问题(LCS)
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS问题)
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS)问题
- 最长公共子序列问题(LCS)
- 最长公共子序列问题(LCS)
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS)问题
- 最长公共子序列问题(LCS)
- C++ 02 —— 访问权限
- SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
- 一个创建工程目录的shell脚本
- linux驱动调试之段错误分析_根据pc值确定出错的代码位置
- 索引
- 递归解决最长公共子序列问题(LCS)
- QT [007] QT UI 的控件操控问题
- Android开发之EditText
- 算法设计与应用基础系列6
- Django module学习之模板
- 安卓学习笔记 6-10 热更新
- mysql之 mysql 5.6不停机主主搭建(活跃双主基于日志点复制)
- keras——常用层
- Unity3D基本入门及功能介绍