最长公共子序列
最长公共子序列问题:给定两个序列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得到
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?