博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最长公共子序列
阅读量:6430 次
发布时间:2019-06-23

本文共 878 字,大约阅读时间需要 2 分钟。

hot3.png

最长公共子序列问题:给定两个序列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]的值是由哪一个子问题的解得到的 

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得到

转载于:https://my.oschina.net/u/204616/blog/545111

你可能感兴趣的文章
Lync Server 2010企业版系列PART1:基础构建
查看>>
走在网页游戏开发的路上(二)
查看>>
8个经过证实的方法:提高机器学习模型的准确率
查看>>
Java读写二进制文件示例
查看>>
使用模板元编程快速的得到斐波那契数。。
查看>>
A strange lift
查看>>
深度学习笔记之关于基本思想、浅层学习、Neural Network和训练过程(三)
查看>>
Java-字符串反转
查看>>
项目管理部分随笔索引
查看>>
一个IT人的成长路
查看>>
Oracle]高效的SQL语句之分析函数
查看>>
语言的信息密度
查看>>
Android数字选择器-NumberPicker
查看>>
Android SDK Manager 更新失败的解决方法
查看>>
Java并发编程:volatile关键字解析
查看>>
Java实现分页数据获取CachedRowSet
查看>>
Lambda应用设计模式
查看>>
4.2. MuseScore
查看>>
C#使用OleDB操作ACCESS插入数据时提示:参数 @p_Contract 没有默认值
查看>>
HTML基础8--CSS、滑动门
查看>>