您的位置:首页 > 其它

2014-6-3任务完成情况

2014-06-03 22:43 246 查看
(1)了解“两字符串最长公共子序列”的概念;

一个字符串的子序列,是指从该字符串中去掉任意多个字符后剩下的字符在不改变顺序的情况下组成的新字符串。这个子序列是可以不连续的。最长公共子序列,是指多个字符串可具有的长度最大的公共的子序列。举个例子,如:有两条随机序列,如 1 3 4 5 5 and 2 4 5 5 7 6,则它们的最长公共子序列便是:4 5 5。

注意最长公共子串和最长公共子序列的区别:

最长公共子串(Longest Common Substirng)和最长公共子序列(Longest Common Subsequence,LCS)的区别为:子串是串的一个连续的部分,子序列则是从不改变序列的顺序,而从序列中去掉任意的元素而获得新的序列;也就是说,子串中字符的位置必须是连续的,子序列则可以不必连续。

(2)用递归法实现最长公共子序列的求解;

实现了了穷举法递归求解算法。简单字符串进行了初步验证,还需大规模数据验证。

(3)用非递归法实现最长公共子序列的求解;

实现了动态规划算法的非递归求解。简单字符串进行了初步验证,还需大规模数据验证。

(4)分析时间复杂度;

穷举法的时间复杂度:假设字符串X、Y长度分别为m、n,在字符串X的子序列中,任何一个字符都有可能出现,也可能不出现,因此,字符串X的子序列的所有可能组合为2^m种。同理字符串Y的所有子序列的可能组合有2^n种。要取得X、Y的所有公共子序列,需要进行2^m*2^n次比较,时间复杂度为O(2^m*2^n),然后在从中选出一个或者多个最大的子序列,复杂度为O(2^m + 2^n)。总体复杂度为2^m*2^n。

动态规划法的时间复杂度:动态规划分两个过程,分别是构造公共子序列长度数组和构造最长公共子序列。构造公共子序列数组,数组中共有(m+1)*(n+1)个元素,计算他们的值时间复杂度为O(m*n);构造最长公共子序列过程复杂度为O(max(m,n))总体复杂度为O(m*n)

(5)证明算法的正确性

各个算法互为印证,稍候构造规模大些的数据进行验证。

参见:求两个字符串的公共子序列
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: