5

我有一个问题,我需要一个算法来解决它。
我找不到它,我不知道问题是否是 NP-Hard。

问题是:我有几个符号序列。我想将它们合并成一个序列,其中包含原始序列的所有符号,保持符号的原始顺序。应删除来自不同序列的重复符号。结果序列必须是可能的最小序列。

如果其中一个序列是“abc”,则结果序列必须是 *a*b*c*,其中 * 是 0 个或多个符号的序列。如果输入序列是 'abc' 和 'cba',则输出必须是 'abcba',包含一次 'c' 并保留 *a*b*c* 和 *c*b*a* 属性。

示例

输入:

abcde
xbcaf
axdaf

一种合并方式:

a-bcde--
-xbc--af
ax--d-af

输出:

axbcdeaf

多个输出是可能的,'abcd' 和 'cba' 将产生 'abcdba'、'abcbda' 或 'abcbad'。我只需要一个输出,任何输出都是有效的,如果它的长度是可能的最小长度。

感谢

4

1 回答 1

5

这个问题被称为最短公共超序列并且已知是NP完全的。如果您对近似值满意,则可以四处搜索并找到类似的内容:最短常见超序列问题的近似算法:实验分析,Barone 等。人 (pdf) .

于 2012-07-25T23:05:24.373 回答