资源描述:
《最长公共子序列心得》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划最长公共子序列心得 算法分析与设计 实验报告 班级: 学号: 姓名:上机时间: 一、实验目的与要求: 1、熟悉最长公共子序列问题的算法; 2、初步掌握动态规划算法。 二、实验题目:最长公共子序列问题 三、实验内容: 四、问题描述: 若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j
2、=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。目的-通过该培训员工可对保安行业有初步了解,并感受到安保行业的发展的巨大潜力,可提升其的专业水平,并确保其在这个行业的安全感。为了适应公司新战略的发展,保障停车场安保新项目的正
3、常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划 例如:“ABCBDAB”和“BDCABA”的最长公共子序列为:BCBA. 五、问题分析与算法设计 六、实验结果及分析 七、实验总结 八、程序代码 #include #include #defineN100 usingnamespacestd; voidLCSLength(intm,intn,char*x,char*y,intc[][N],intb[][N]){ for(inti=1;i=c[i][j-1]) { c[i][j]=c[
4、i-1][j]; b[i][j]=2; } else { c[i][j]=c[i][j-1]; b[i][j]=3; }目的-通过该培训员工可对保安行业有初步了解,并感受到安保行业的发展的巨大潜力,可提升其的专业水平,并确保其在这个行业的安全感。为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划 } } } voidLCS(inti,intj,char*x,intb[][N]){ if(!i
5、
6、!j) return; switch(
7、b[i][j]) { case1: LCS(i-1,j-1,x,b); cout #include #defineN20 usingnamespacestd; intd[N][N]; intLCSlength(char*a,char*b,intc[][N]) { inti,j;intalen=strlen(a); intblen=strlen(b); for(i=0;ic[i-1][j]?c[i][j-1]:c[i-1][j]; returnc[alen][blen]; }目的-通过该培训员
8、工可对保安行业有初步了解,并感受到安保行业的发展的巨大潜力,可提升其的专业水平,并确保其在这个行业的安全感。为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划 char*LCS(char*s,char*a,char*b) { intc[N][N]; inti=strlen(a); intj=strlen(b); intk=LCSlength(a,b,c); s[k]=' '; while(k>0) { if(c[i][j]==c[i-1]
9、[j]) i--; elseif(c[i][j]==c[i][j-1]) j--; else { s[--k]=a[i-1]; i--; j--; } } returns; }目的-通过该培训员工可对保安行业有初步了解,并感受到安保行业的发展的巨大潜力,可提升其的专业水平,并确保其在这个行业的安全感。为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划 main() { char*s=newchar[N]; chars1[N];
10、 chars2[N]; cout>s1; cout>s2; cout,则另一序列Z=是X的子序列是指存在一个严格递增的下标序列,使得对于所有j=1,2,…,k有Xij=Zj 例如,序列Z=是序列X=的子序列,相应的递增下标序列为。给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y