动态规划-最长公共子序列
来源:互联网 发布:海关出口数据怎么查 编辑:程序博客网 时间:2024/05/17 17:43
assuming i,j start from 1;
0, ( i=0 or j=0)
c(i,j)= c(i-1,j-1)+1 ( i,j>0 and A[i]=B[j])
Max( c[i-1,j),c(i,j-1)) ( i,j>0 and A[i]!=B[j])
时间复杂度O(m*n),空间复杂度O(m*n)
#define MAX 100int C[MAX][MAX];int D[MAX][MAX];//输出子序列void Print_LCSub(char *str,int i,int j){if(i==0|| j==0)return;if(D[i][j]==0){Print_LCSub(str,i-1,j-1);cout<<str[i-1];}else if(D[i][j]==1)Print_LCSub(str,i-1,j);elsePrint_LCSub(str,i,j-1);}void LCSubsequence(char *str1,char *str2){int len1,len2;int i,j;len1=strlen(str1);len2=strlen(str2);for(i=0;i<=len1;i++)C[i][0]=0;for(j=1;j<=len2;j++)C[0][j]=0;for(i=1;i<=len1;i++){for(j=1;j<=len2;j++){if(str1[i-1]==str2[j-1]){C[i][j]=C[i-1][j-1]+1;D[i][j]=0; // left and up}else if(C[i-1][j]>=C[i][j-1]){C[i][j]=C[i-1][j];D[i][j]=1; // up }else{C[i][j]=C[i][j-1];D[i][j]=-1; // left }}}//output matrixfor(i=0;i<=len1;i++){for(j=0;j<=len2;j++)cout<<setw(2)<<C[i][j]<<" ";cout<<endl;}cout<<"MaxLen="<<C[len1][len2]<<endl;Print_LCSub(str1,len1,len2);cout<<endl;}void main(){char str1[200]="xab4c3de89fgh";char str2[200]="ac234egxxh9";//freopen("D:/test.txt","r",stdin);LCSubsequence(str1,str2);}
输出结果:
- 最长公共子序列&&最长公共子串---[动态规划]
- 动态规划-最长公共子序列、最长公共子串
- 动态规划之最长公共子序列
- 动态规划 ------- 最长公共子序列
- 动态规划实现最长公共子序列
- 【动态规划】最长公共子序列LCS
- 动态规划--最长公共子序列
- 动态规划:最长公共子序列
- 动态规划解决最长公共子序列
- 最长公共子序列-动态规划DP
- 动态规划--最长公共子序列
- 最长公共子序列(动态规划)
- 动态规划解决最长公共子序列
- 最长公共子序列(动态规划)
- 动态规划 最长公共子序列
- 动态规划 - 最长公共子序列
- 动态规划之最长公共子序列
- 最长公共子序列 [动态规划]
- ncurses介绍及安装指南
- 使用fastboot 进行烧机
- cstring 转 string
- Android之使用Android-query框架进行开发(一)
- 在myeclipse 任意版本添加SVN插件,不会出错误提示,完美版本。
- 动态规划-最长公共子序列
- 八方因素决定负载均衡方案
- C语言中二维数组的动态申请与释放
- 我们很容易忽略的c语言知识(二)
- JAVA和C++高低位转换
- cat和EOF
- C# 枚举 Win32_LogicalDisk 类的所有实例,并显示每个实例的 DeviceID 值
- stagefright,OpenMax框架
- 数据结构学习笔记之三(二叉树)