前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最长公共子序列

最长公共子序列

作者头像
用户1154259
发布2018-01-17 15:09:00
7370
发布2018-01-17 15:09:00
举报

最长公共子序列问题:给定两个序列X={x1,x2,....xm},    Y={y1,y2,yn},找出XY的最长公共子序列

1 最长公共子序列结构

  1 xm=yn,则zk = xm = yn,且zk-1是xm-1和yn-1的最长公共子序列

  2 xm!=yn,zk!=xm,则Z是xm-1,yn的最长共公共子序列

  3 xm!=yn,zk!=yn,则Z是xm,yn-1的最长公共子序列

2 子问题的递归结构

  1 xm=yn时,找出xm-1,yn-1的最长公共子序列

  2 xm!=yn时,找出xm 和 yn-1     或者   xm-1和yn的最长公共子序列

3 计算最优值

c[i][j]:存储xi,yj的最长公共子序列长度

b[i][j]:记录c[i][j]的值是由哪一个子问题的解得到的 

代码语言:javascript
复制
void LCSLength(int m,int n,char* x,int * * c,int * *b){
int i,j;
for(i=1;i<=m;i++)
    c[i][0] = 0;
for(i=1;i<=m;i++)
    c[o][i] = 0;
for(i=1;i<=m;i++)
  for(j=1;j<=n;j++){
     if(x[i] == y[j]){
          c[i][j] = c[i-1][j-1];  b[i][j]=1;
      }
     else if(c[i-1][j] >=c[i][j-1]){
          c[i][j] = c[i-1][j];   b[i][j] = 2;
      }
     else{
          c[i][j] = c[i][j-1];   b[i][j] = 3;
      }
} 
} 

耗时O(mn);

4 构造最长公共子序列

b[m][n]开始:

  值为1:由xm-1,yn-1得到

  值为2:由xm-1,yn得到

  值为3:由xm,yn-1得到

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012-10-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档