算法设计与分析实践-作业9-LCS

算法设计与分析实践-作业9-LCS

1. 问题

算法设计与分析实践-作业9-LCS

2. 解析

算法设计与分析实践-作业9-LCS
如上图所示,Zk就是我们所要求出的最大公共子序列。
那么,有以下三种情况:
算法设计与分析实践-作业9-LCS

分别对两种情况(情况二与情况三类似)举例一下以便于理解:

算法设计与分析实践-作业9-LCS
算法设计与分析实践-作业9-LCS
我们可以用数学语言来表示:
算法设计与分析实践-作业9-LCS

3. 设计

   算法1:

for i =1 to m
 for j=1 to n
算法设计与分析实践-作业9-LCS
这个算法是求出最长公共子序列的长度,但是在求的过程中对删除的节点标记,以便下一个算法回溯。

   算法2:

算法设计与分析实践-作业9-LCS
回溯算法:

   举个例子以便于理解:

算法设计与分析实践-作业9-LCS
算法设计与分析实践-作业9-LCS

4.分析:

两重循环,故时间复杂度为O(mn)

5. 源码

https://github.com/Ericjin1022/-suanfa