首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最短子序列时间复杂度

最短子序列时间复杂度
EN

Stack Overflow用户
提问于 2015-02-17 14:36:32
回答 1查看 235关注 0票数 3

如果我们有两个字母序列X=和Y=。我们希望找到最短的序列,这样X和Y就会成为该序列的子序列。这项工作的时间复杂性是多少?

1) O(nm)

( 2) O(n+m)

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

我的解决方案:我找到了一种动态编程方法,并使用O(nm)顺序。有更好的解决办法吗?

感谢任何人

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-17 14:57:36

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

给定这两个序列及其最长的公共子序列,您可以使用类似合并的贪婪算法在线性时间内构造最短的超序列,如果X或Y的字母从公共子序列中丢失,则将字母添加到结果中,并前进到下一个字母。证明该算法产生最短的超序列是很简单的,否则它将与我们使用最长的公共子序列的断言相矛盾。

由于没有一个LCS解是线性的,求解LCS也将主导求解这个问题的算法。LCS解决方案的复杂性取决于几个因素,例如字母表的长度。

m)

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28563855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档