我已经进行了大量研究以找到M = 2序列最长的序列,但是我试图找出如何对M≥2序列进行序列化的方法
我得到N和M:M个序列,其中包含N个唯一元素。N是{1-N}的集合。我已经考虑过动态编程方法,但是对于如何真正地将其合并仍然感到困惑。
输入示例
5 3 5 3 4 1 2 2 5 4 3 1 5 2 3 1 4
可以看到这里的最大序列是
5 3 1
预期产量
Length = 3
一个简单的想法。
对于和i之间的每个数字,计算最后一个数字为的最长子序列。(称之为)1``N``i``a[i]
i
1``N``i``a[i]
为此,我们将从头到尾遍历i第一个序列中的数字。如果是a[i] > 1,那么j在每个序列中都有这样的数字出现在之前i。 现在我们可以检查和的所有可能值j(如果之前的条件成立)a[i] = max(a[i], a[j] + 1)。
a[i] > 1
j
a[i] = max(a[i], a[j] + 1)
作为最后一位,因为在第一个序列j之前i,所以意味着a[j]已经被计算。
a[j]
for each i in first_sequence // for the OP's example, 'i' would take values [5, 3, 4, 1, 2], in this order a[i] = 1; for each j in 1..N if j is before i in each sequence a[i] = max(a[i], a[j] + 1) end end end
这是O(N^2*M),如果你事先计算矩阵位置。
O(N^2*M)