最长公共子序列问题
来源:互联网 发布:祛痘消炎的药膏知乎 编辑:程序博客网 时间:2024/05/20 03:47
/*非递归实现*/
/*非递归实习是采用了动态规划的实现,时间复杂度为O(nk)*/
#include<iostream>
#include<vector>using namespace std;
int lcs_dp(char a[],int a_length,char b[],int b_length)
{
vector<vector<int> >value_table;
value_table.resize(a_length+1,vector<int>(b_length,0));
for(int i=0;i<=a_length;i++)
{
for(int j=0;j<=b_length;j++)
{
if(i==0||j==0)
value_table[i][j]=0;
else if(a[i-1]==b[j-1])
value_table[i][j]=value_table[i-1][j-1]+1;
else
value_table[i][j]=max(value_table[i-1][j],value_table[i][j-1]);
}
}
return value_table[a_length][b_length];
}
int main()
{
char a[]="ABCDGH";
char b[]="AEDFHR";
cout<<lcs_dp(a,6,b,6)<<endl;
return 0;
}
/*递归实现*/
#include<iostream>
using namespace std;
int lcs(char a[],int a_length,char b[],int b_length)
{
if(a_length==0||b_length==0)
{
return 0;
}
else if(a[a_length-1]==b[b_length-1])
{
return 1+lcs(a,a_length-1,b,b_length-1);
}
else {
int a_next=lcs(a,a_length-1,b,b_length);
int b_next=lcs(a,a_length,b,b_length-1);
return max(a_next,b_next);
}
}
int main()
{
char a[]="ABCDGH";
char b[]="AEDFHR";
cout<<lcs(a,6,b,6)<<endl;
return 0;
}
阅读全文
0 0
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- 最长公共子序列问题
- POJ 3667 Hotel(线段树 区间合并 模板题)
- 2017.11.01工作日记
- 图像特征提取三大法宝:HOG特征,LBP特征,Haar特征
- Javaweb中结合mysql数据库实现分页功能
- volatile
- 最长公共子序列问题
- 《EffectiveC++》读书笔记(二)条款4-6
- 2017.11.01
- 4.2
- NOIP 2005 Senior 3
- Android语音录制和播放
- ubuntu16.04如何把菜单栏放到下面
- java可变参数
- Spring Boot中的缓存支持(一)注解配置与EhCache使用