算法导论第十五章习题15.4-4c++代码实现
来源:互联网 发布:东营区一中知校二维码 编辑:程序博客网 时间:2024/04/30 03:42
只用两行表c就能实现计算LCS长度的算法。因为在计算长度的时候c[i][j]只需要上一行以及本行的计数就能计算出结果,所以我们只用两行表c来实现。每当第二行的长度计算完成之后,便将第二行的长度赋给第一行,而第二行清0,这样计算下一行的时候,第一行就能使用上一层循环中的长度。代码如下:
#include<iostream>#include<string>using namespace std;int LCS_Length(string x,string y){int m,n,i,j,k;m=x.length();n=y.length();//使y永远为最小的,n为最短的if(m<=n){string temp;temp=x;x=y;y=temp;i=m;m=n;n=i;}int c[2][100]={0};for(i=1;i<=n;i++){c[0][i]=0;}c[1][0]=0;for(i=1;i<=m;i++){for(j=1;j<=n;j++){if(x[i-1]==y[j-1]){c[1][j]=c[0][j-1]+1;}else if(c[0][j]>=c[1][j-1]){c[1][j]=c[0][j];}else{c[1][j]=c[1][j-1];}}//将第二行的结果放到第一行中,而第二行赋值为0for(k=1;k<=n;k++){c[0][k]=c[1][k];c[1][k]=0;}}return c[0][n];}int main(){string x="abcbdab";string y="bdcaba";cout<<LCS_Length(x,y)<<endl;return 0;}
但是该代码中仍然多了几个不必要的循环,从而增加了时间复杂度,下面对改代码进行简化:
#include<iostream>#include<string>using namespace std;int LCS_LengthC(string x,string y){int m,n,i,j;bool flag=0;m=x.length();n=y.length();//使y永远为最小的,n为最短的if(m<=n){string temp;temp=x;x=y;y=temp;i=m;m=n;n=i;}int c[2][10]={0};c[1][0]=0;for(i=1;i<=m;i++){for(j=1;j<=n;j++){if(x[i-1]==y[j-1]){c[(int)!flag][j]=c[(int)flag][j-1]+1;}else if(c[(int)flag][j]>=c[(int)!flag][j-1]){c[(int)!flag][j]=c[(int)flag][j];}else{c[(int)!flag][j]=c[(int)!flag][j-1];}}flag=!flag;for(int k=1;k<=n;k++){c[(int)!flag][k]=0;}}return c[(int)flag][n];}int main(){string x="abcbdab";string y="bdcaba";cout<<LCS_LengthC(x,y)<<endl;return 0;}
- 算法导论第十五章习题15.4-4c++代码实现
- 算法导论第十五章习题15.1-1c++代码实现
- 算法导论第十五章习题15.4-2
- 算法导论第十五章习题15.4-5
- 算法导论第十五章-动态规划-Cpp代码实现
- 算法导论第二章课后习题代码实现
- 算法导论习题6.2代码实现
- 算法导论第十五章
- 算法导论 习题 15.4.4
- 算法导论第十五章15.2-4
- 算法导论第十五章---最长公共子串LCS代码实现
- 算法导论第十五章-装配线高度算法实现
- 算法导论例题及课后习题代码实现——第六章
- 算法导论第十五章习题15-1--双调欧几里得旅行商问题
- C++Primer习题第十五章
- 算法导论第十一章习题11.1-4
- 算法导论第十一章习题11.2-4
- 算法导论第4章习题解析
- VBscript (一) Working with files
- Spring3 MVC+Mybatis博客网站
- C++函数学习(三)
- Spring MVC 教程,快速入门,深入分析
- 怎样把.net页面中的表格转换成pdf(C#.net转换为VB.net)
- 算法导论第十五章习题15.4-4c++代码实现
- ORACLE的SGA
- hadoop修改权限问题
- Hadoop学习笔记一 简要介绍
- 高位优先与低位优先
- (百例编程)75.10个小孩分糖果
- uva - 10198 - Counting
- display的值有哪些
- 解析Linux内核的同步与互斥机制(一)