字符串算法——求最长公共子序列(摘自算法基础,没有代码)
来源:互联网 发布:nginx conf 配置 编辑:程序博客网 时间:2024/05/26 05:53
求LCS的长度
程序 COMPUTE_LCS_TABLE(X,Y)
输入: X和Y:两个长度分别为m和n的字符串
输出: 数组l[0...m,0...n]。l[m,n]的值为X和Y的最长公共子序列的长度
步骤:
1.创建一个新数组l[0...m,0...n]
2.令i从0~m依次取值
A.将l[i,0]赋值为0
3.令j从0~n依次取值
A.将l[0,j]赋值为0
4.令i从1~m依次取值
A.令j从1~n依次取值
i.如果xi与yj相同,那么将l[i,j]赋值为l[i-1,j-1]+1
ii.否则(xi与yj不同),将l[i,j]赋值为l[i,j-1]和l[i-1,j]中的较大值。如果l[i,j-1]等于l[i-1,j],将l[i,j]取l[i,j-1]或l[i-1,j]均可。
5.返回数组l
接下来,利用COMPUTE_LCS_TABLE(X,Y)来逆序得到LCS。
程序 ASSEMBLE_LCS(X,Y,l,i,j)
输入 X和Y:两个字符串
l:调用COMPUTE_LCS_TABLE程序返回的填充好的数组
i和j:分别指向数组X和Y的索引,以及指向数组l的索引
输出 Xi和Yj的LCS(最长公共子序列)
步骤
1.如果l[i,j]等于0,那么返回空串
2.否则(因为l[i,j]大于0,i和j均大于0),如果xi等于yj,那么返回由递归调用ASSEMBLE_LCS(X,Y,l,i-1,j-1)说返回的字符串,再在返回的字符串的末尾加上xi(或者yj)所组成的字符串
3.否则(xi不等于yj),如果l[i,j-1]大于l[i-1,j],那么返回递归调用ASSEMBLE_LCS(X,Y,l,i,j-1)所返回的字符串
4.否则(xi不等于yj并且l[i,j-1]小于等于l[i-1,j]),那么返回递归调用ASSEMBLE_LCS(X,Y,l,i-1,j)说返回的字符串
- 字符串算法——求最长公共子序列(摘自算法基础,没有代码)
- 【基础算法】求最长公共子序列
- DP—求最长公共子序列LCS(代码)
- 算法导论—最长公共子序列
- 算法导论—最长公共子序列
- 每天一道算法题(5)——求2个字符串的最长公共子序列和最长公共子字符串
- 字符串算法之最长公共子序列
- 求两个字符串最长公共子序列的算法优化(C++实现)
- 判断子序列、求最长公共子序列算法实现
- 算法序列——最长公共子序列
- 算法12—动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
- 最长公共子序列算法(LCS)
- LCS算法(最长公共子序列)
- 最长公共子序列(LCS)算法
- 算法:最长公共子序列
- 最长公共子序列算法
- 【算法】最长公共子序列
- 最长公共子序列算法
- WeX5--单页应用
- POJ1584 A Round Peg in a Ground Hole
- OpenStack 升级实践文章
- hdu2602 Bone Collector 01背包问题
- UWP Windows10开发获取设备位置(经纬度)
- 字符串算法——求最长公共子序列(摘自算法基础,没有代码)
- 专业的个人记帐软件 爱上记帐 1.0.1
- 二叉树的 前中后遍历
- json文件解析为字符串的操作
- BZOJ2792: [Poi2012]Well
- 【C语言简单说】八:分支结构之if(1)
- 前端开源项目持续集成三剑客
- 数据持久化
- JS去除右边逗号的简单方法