算法分析与设计-第07章.pptVIP

  1. 1、本文档共174页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

7.4.3最长公共子序列算法【例7-6】设有两个序列X=(x1,x2,…,x7)=(a,b,c,b,d,a,b),Y=(y1,y2,…,y6)=(b,d,c,a,b,a),求最长公共子序列。为了能够构造最长公共子序列,在求c[i][j]的同时,还求s[i][j]。上格≥左格上格左格S[i][j]记录c[i][j]的值是由三个子问题c[i-1][j-1]+1,c[i-1][j]和c[i][j-1]中的哪一个计算得到的。这一信息将用于构造最长公共子序列。0000000000000000c[i][j]0111s[i][j]由于a?b,且上格?左格,故取上格000000000000002同时置为2221由于a=a,故取左上格+1同时置为1314最后c[7][6]=4即为最长公共子序列的长度由于a?b,且上格左格,故取左格同时置为3s[i][j]abcb即LCS为:(x2,x3,x4,x6)=(b,c,b,a)LCS的构造【程序7-5】求LCS的长度classLCS{public:LCS(intnx,intny,char*x,char*y);voidLCSLength();voidCLCS();……private:voidCLCS(inti,intj);int**c,**s,m,n;char*a,*b;};intLCS::LCSLength(){for(inti=1;i=m;i++)c[i][0]=0;//0列置0for(i=1;i=n;i++)c[0][i]=0;//0行置0for(i=1;i=m;i++)for(intj=1;j=n;j++)if(x[i]==y[j])//xi=yj时{c[i][j]=c[i-1][j-1]+1;s[i][j]=1;}//左上格+1elseif(c[i-1][j]=c[i][j-1])//上格≥左格{c[i][j]=c[i-1][j];s[i][j]=2;}//则取上格else{c[i][j]=c[i][j-1];s[i][j]=3;}//否则取左格returnc[m][n];}//时间复杂度为O(m?n)【程序7-6】构造最长公共子序列voidLCS::CLCS(inti,intj){if(i==0||j==0)return;if(s[i][j]==1){CLCS(i-1,j-1);//往左上格走couta[i];}elseif(s[i][j]==2)CLCS(i-1,j);//往上格走elseCLCS(i,j-1);//往左格走}O(m+n)7.4.4算法的改进改进方法一:由于c[i][j]是由c[i][j]=c[i-1][j-1]+1(s[i][j]=1),c[i][j]=c[i-1][j](s[i][j]=2)或c[i][j]=c[i][j-1](s[i][j]=3)得到,从它就可以判断c[i][j]是从三者中哪一个计算得到的,而不必借助s,从而达到节省存储空间的目的。这样改进后的时间是O(m+n)。4abcb即LCS为:(x2,x3,x4,x6)=(b,c,b,a)从右下角出发c[i][j]改进方法一由于b≠a,且上格?下格,故往上走。由于a=a,故往左上格走。由于c≠a,且上格左格,故往左走。改进方法二:在只求最长公共子序列的长度、无需构造最优解时,也可以只用两行元素空间,时间是O(min{m,n})。原因:计算c[i][j]时仅用到第i行和第i-1行元素。c[0][n]c[1][n]c[2][n]改进方法二01

您可能关注的文档

文档评论(0)

趁早学习 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档