最短的常见超序问题基本信息

最短的通用超级序列是密切相关的最长公共子,你可以作为承担这一任务的外部功能使用上有问题。最短的共同超级序列问题是与最长公共子序列问题密切相关的问题。

最短的常见超序(scs)是最小长度的常见超序。在最短的共同超序列问题中,给出了两个序列 XY,并且任务是找到这些序列的最短可能的共同超序列。通常,scs 不是唯一的。

给定两个序列 X = <x1,...,xm>Y = <y1,...,yn>,序列 U = <u1,...,uk>XY 的共同超序列,如果 UXY 的超级序列。换句话说,字符串 xy 的最短公共超级序列是最短的字符串 z,使得 xy 都是 z 的子序列。

对于两个输入序列,可以容易地从最长的公共子序列(lcs)形成 scs。例如,如果 X[1..m]=abcbdabY[1..n]=bdcaba,则 lcs 是 Z[1..r]=bcba。通过在保留符号顺序的同时插入非 lcs 符号,我们得到 scs:U[1..t]=abdcabdab

很明显,r+t=m+n 用于两个输入序列。但是,对于三个或更多输入序列,这不成立。另请注意,lcs 和 scs 问题不是双重问题。

对于查找字符串的更一般问题,S 是一组字符串 S1,S2,...,Sl 的超字符串,问题是 NP-Complete。此外,对于普通情况可以找到良好的近似值,但对于最坏的情况则不然。

最短共同超序问题的例子:

https://i.stack.imgur.com/9i38E.jpg

时间复杂性: O(max(m,n))