最长公共子序列

来源:互联网 发布:全国城市mysql数据库 编辑:程序博客网 时间:2024/06/06 02:40
## 问题描述 ##

给定两个序列X={x1,x2,x3,…xm};y={y1,y2,y3,…yn}求X和Y公共最长子序列。本节将展示如何用动态规划方法高效地求解LCS问题.

## 步骤一 ##

刻画最长公共子序列的特征,如果用暴力方法求解LCS问题,就要穷举X的所有子序列,对每个子序列检查它是否也是Y的子序列,记录找到的最长子序列,所以呢,X有2的m次方个子序列,因此暴力方法的运行时间为指数阶,对较长的序列不适用

我们也可以将其认为具有最优子结构的问题
这里写图片描述

## 一个递归解 ##

在求X={x1,x2,x3,… xm}和Y={y1,y2,y3,…yn};的一个LCS时,我们需要求解一个或两个子问题,如果Xm=Yn,那么我们应该求解X(m-1)和Y(n-1)的一个LCS,将这个数据追加到LCS的末尾,
但是如果X序列和Y序列不相同的话,我们需要解决的解释两个子问题。即X(m-1)和Y以及Y(n-1)和X。在求得的的LCS结果中取最长,但是问题是在这些子问题中,有很多交叉。
这里写图片描述
## 计算LCS的长度 ##
伪代码如下:

这里写图片描述

这是我画的理解图:
这里写图片描述

## 构造LCS ##

我们可以利用LCS-LENGTH()函数返回的表b快速构造LCS
其中i代表X.length,j代表Y.length

这里写图片描述

## 发个博客累了一个下午,自己给自己一个赞吧。。。 ##
0 0
原创粉丝点击