目录
最长公共子序列(LCS)
我们在写论文或者文章的时候,是否被判定为抄袭,其思想就是使用求最长公共子序列方法查找两篇文章相似度高不高。
子序列是指某个序列中任意地去掉若干个不一定连续的元素后形成的序列。如果一个元素也不去掉,其本身也是它的一个子序列。设序列X,Y:
如果存在X的元素构成的严格递增序列,使得
则Y是X的一个子序列。
例如BDAB、ABCBDAB是ABCBDAB的一个子序列。
如果存在Z同时是X和Y的子序列,则称Z是X和Y的公共子序列。子序列的长度则是指子序列的元素个数。最长公共子序列问题就是在给定的和
序列中,求出这两个序列的最长公共子序列。
动态规划分析思路
如果用枚举法暴力求解,首先得列举出X所有的子序列,依次检查X的每个子序列是否在Y序列中出现。设,m,k分别是X和Y序列元素个数。例如,
,子序列有3个<A,B,AB>,子序列个数
;
,子序列有7个<A,B,C,AB,AC,BC,ABC>,子序列个数
;
,子序列有15个<A,B,C,D,AB,AC,AD,BC,BD,CD,ABC,ABD,ACD,BCD,ABCD>,子序列个数
;
依次类推,暴力枚举算法下,得执行获取子序列,再执行
次子序列是否在Y中出现,则最终求出所有子序列时间复杂度为
,呈现指数级别的时间复杂度,速度那是相当的慢。如果用动态规划法去求最长公共子序列,那将是大大提高效率。
动态规划的一般步骤:
- 刻画出最优解的子结构;
- 确定动态转移方程;
- 自底向上计算出最优解;
- 根据全局最优解输出某一个最优解的值;
构造子结构
设序列X,Y,Z:
;
;
,其中,Z是X和Y的一个最长公共子序列。
(1).如果
,那么当
时,
是

最低0.47元/天 解锁文章
29万+

被折叠的 条评论
为什么被折叠?



