LCS的做备忘录算法
来源:互联网 发布:java中replace函数 编辑:程序博客网 时间:2024/05/29 23:47
/*输入:两个字符串输出:最长公共子序列算法思想:自顶向下的做备忘录,递归*/#include <iostream>#include <cstring>using namespace std;string x,y;int c[100][100];int b[100][100];int inf = 0x7fff; //int最大2^15-1//int xx,yy; //特别注意!!递归函数内部用到的变量不能声明为全局变量,而应该每次递归定义一次!!int lookup_LCS(string x,string y,int i,int j){ if(c[i][j]<inf) //若已经填表,直接返回表项值,不必重新计算 return c[i][j]; if(x[i-1]==y[j-1]) { c[i][j]=lookup_LCS(x,y,i-1,j-1)+1; //递归计算 b[i][j]=0; } else { int xx=lookup_LCS(x,y,i-1,j); int yy=lookup_LCS(x,y,i,j-1); //c[i][j]=max(xx,yy); if(xx>=yy) { c[i][j]=xx; b[i][j]=1; } else { c[i][j]=yy; b[i][j]=-1; } } return c[i][j];}int memoized_LCS(string x,string y){ int m,n,i,j,res; m=x.length(); n=y.length(); for(i=0;i<=m;i++) c[i][0]=0; for(j=1;j<=n;j++) c[0][j]=0; for(i=1;i<=m;i++) //初始化c[][],b[][] for(j=1;j<=n;j++) { c[i][j]=inf; b[i][j]=inf; } res = lookup_LCS(x,y,m,n); cout <<res <<endl; return 0;}void print_lcs(string x,int b[][100],int i,int j) //根据b[][]构造一个最优解,打印{ if(i==0 || j==0) return; if(b[i][j]==0) { print_lcs(x,b,i-1,j-1); cout <<x[i-1]; //string x 有一个字符的偏移 } else if(b[i][j]==1) print_lcs(x,b,i-1,j); else print_lcs(x,b,i,j-1);}int main(){ int m,n,i,j; cin >>x; cin >>y; m=x.length(); n=y.length(); memoized_LCS(x,y); print_lcs(x,b,m,n); cout <<endl; for(j=1;j<=n;j++) //打印c[][]和b[][] cout <<" \t" <<y[j-1]; cout <<endl; for(i=1;i<=m;i++) { cout <<x[i-1] <<"\t"; for(j=1;j<=n;j++) cout <<c[i][j] <<"\t"; cout <<endl; } cout <<endl; for(j=0;j<n;j++) cout <<" \t" <<y[j]; cout <<endl; for(i=1;i<=m;i++) { cout <<x[i-1] <<"\t"; //string x 有一个字符的偏移 for(j=1;j<=n;j++) cout <<b[i][j] <<"\t"; cout <<endl; } cout <<endl;}
0 0
- LCS的做备忘录算法
- LCS 算法的改进
- 算法导论第十五章--动态规划的变形(做备忘录的递归算法)
- Hirschberg的LCS算法实现
- LCS算法的python实现
- LCS的动态规划算法
- LCS算法的C++实现
- 备忘录法解决LCS问题
- LCS算法
- LCS算法
- LCS 算法
- LCS算法
- LCS算法
- LCS算法
- lcs算法
- LCS 算法
- LCS算法
- LCS 算法
- NYOJ740 - “炫舞家“ST (DP)
- 正向代理与反向代理的区别【Nginx读书笔记】
- 基于CoAP的无线传感器网络与互联网的互联研究
- C语言实现字符转unix时间戳
- 在VC6.0中多线程编程示例(带同步信号量)
- LCS的做备忘录算法
- eclipse导入其他包出现错误
- 匈牙利算法
- POI解析Excel文档
- Linux grep命令
- linux 下实现高性能读写锁(read/write lock)
- 小议ASP.NET模板引擎技术的使用
- maven 运行java程序 java.lang.NoClassDefFoundError
- Swift语言:苹果在程序员社区投下的重磅炸弹