最短子序列时间复杂度

Shortest Sub-sequence Time Complexity

如果我们有两个字母序列 X= 和 Y=。我们想找到最短的序列,使得 X 和 Y 成为该序列的子序列。这项工作的时间复杂度是多少?

1) O(纳米)

2) O(n+m)

3) O((n+m)log(n+m))

我的解决办法:我找到了动态规划的方法,使用O(nm)阶。有更好的解决方案吗?

感谢任何人

您可以将此问题简化为寻找最长公共子序列 (LCS)。

给定两个序列及其最长公共子序列,您可以使用类似合并的贪婪算法在线性时间内构建最短的超序列,该算法将来自如果公共子序列中缺少 X 或 Y,则对结果进行 X 或 Y,然后前进到下一个字母。证明该算法产生最短超序列是微不足道的,因为否则它会与我们使用最长公共子序列的断言相矛盾。

由于 none 的 LCS 解决方案是线性的,解决 LCS 也将主导寻找此问题答案的算法。 LCS 解决方案的复杂性取决于几个因素,例如字母表的长度。

A solution to the general LCS is O(n*m).

固定字母表上的LCS的解决方案是O((n+m+c)*long(n+m)),其中c是公共子序列的长度。