【问题标题】:Can someone tell me if this approach to the Longest Common Subsequence of Three Sequences problem is correct有人可以告诉我这种解决三序列最长公共子序列问题的方法是否正确
【发布时间】:2020-05-16 03:11:37
【问题描述】:
Is it possible to do Longest Common Subsequence of Three Sequences using the same algorithm used for solving Longest Common Subsequence of Two Sequences,

我的想法是找到以下常见子序列。假设三个序列是'a'、'b'和'c'。因此,我将传递给用于解决两个序列的最长公共子序列的函数,如 1)(a,b) 2)(b,c) 和 3)(c,a) 并将这三种情况中的每一种的长度存储在一个数组,最后输出三者中的最小值。

我已经能够做到最后一个测试用例,如果有人能建议上述想法是否正确,我将不胜感激

我已经使用表格方法来解决两个序列的最长公共子序列,它适用于所有测试用例。 (表格方法灵感来自这个视频https://www.youtube.com/watch?v=NnD96abizww

【问题讨论】:

  • 'aabb', 'aacc', 'bbcc' 在 2 乘 2 取时具有长度为 2 的公共子序列,但它们三个都没有公共子序列。
  • @ThierryLathuille 非常感谢
  • 原来同样的想法也可以扩展到 k>2

标签: python dynamic


【解决方案1】:
s1 = [0] + set1
s2 = [0] + set2
s3 = [0] + set3

T = [] #OUTPUT ARRAY
D2 = [] #2D ARRAY 

for k in range(o + 1):
    D2 = []
    for j in  range(m+1):
        x = [0]*(n+1) #THIS IS IMPORTANT ; IF PLACED OUT THEN IT WILL CREATE A REFERENCE
        D2.append(x)
    T.append(D2)

#INITIALLY T IS AN ARRAY OF ZEROS WITH THE RIGHT DIMENSION

for k in range(1,o+1):
    for j in range(1 ,m+1):
        for i  in range(1,n+1):
            if(s1[i] == s2[j] == s3[k]):
                T[k][j][i] = T[k-1][j-1][i-1] + 1
            else:
                x = []
                x.append(T[k][j][i-1])
                x.append(T[k][j-1][i])
                x.append(T[k-1][j][i])
                T[k][j][i] = max(x)

print(T[k][m][n])

【讨论】:

  • set1 set2 和 set3 是输入,中间有一个空格,变量 n , m 和 k 是对应的长度
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 2013-04-13
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多