求解两个长度为n的序列X和Y的一个最长公共序列(如序列ABCBDAB和BDCABA的一个最长公共子序列为BCBA)可以采用多种计算方法。如可以采用蛮力法,对X的每一个子序列,判断其是否也是Y的子序列,最后求出最长的即可,该方法的时间复杂度为(62)。经分析

admin2019-07-12  33

问题 求解两个长度为n的序列X和Y的一个最长公共序列(如序列ABCBDAB和BDCABA的一个最长公共子序列为BCBA)可以采用多种计算方法。如可以采用蛮力法,对X的每一个子序列,判断其是否也是Y的子序列,最后求出最长的即可,该方法的时间复杂度为(62)。经分析发现该问题具有最优子序列,可以定义序列成都分别为i和j的两个序列X和Y的最长公共子序列的成都为C[i,j]如下式所示。该方法的时间复杂度为(63)。

(63)

选项 A、O(n2)
B、O(n2lgn)
C、O(n3)
D、O(n2n)

答案A

解析 第62题一个给定的序列的子序列,就是将给定序列中零个或多个元素去掉之后得到的结果。序列ABCBDAB去掉划线的字符ABCBDAB得到的BCBA就是它的一个子序列。一个序列的子序列有2n个,将X、Y的所有子序列都检查过后即可求出X、Y的最长公共子序列。这种方式的时间复杂度为O(n2n)。
第63题引进一个二维数组c[j]表示X的i位和Y的j位之前的最长公共子序列的长度,按照公式将数值填入下表。

此时,c[j]中最大的数就是X和Y的最长公共子序列的长度,等于4。该算法的时间复杂度为O(n2)。
转载请注明原文地址:https://kaotiyun.com/show/zQCZ777K
0

相关试题推荐
最新回复(0)