给定一些字符串片段,我想找到包含所有片段的最短的单个字符串(“输出字符串”)。片段在输出字符串中可以相互重叠。
例:
对于字符串片段:
BCDA
AGF
ABC
以下输出字符串包含所有片段,并且是通过天真的附加而制成的:
BCDAAGFABC
但是,此输出字符串更好(更短),因为它使用了重叠:
ABCDAGF
^
ABC
^
BCDA
^
AGF
我正在寻找解决此问题的算法。找到严格最短的输出字符串并不是绝对重要,但是越短越好。我在寻找一种比明显的幼稚算法更好的算法,该算法会尝试附加输入片段的所有排列并消除重叠(看起来是NP-Complete)。
我已经开始研究解决方案,事实证明这很有趣。我想看看其他人会提出什么。我会在一段时间内将正在进行的工作添加到该问题中。
3
问题似乎是NP完全的。如果是这样,您将根本找不到用于确定最短字符串的多项式算法,但是可能会有多项式算法给出近似(而不是最短的)解。
—
superM 2012年
这对于NP完全的博客文章是好的:codinghorror.com/blog/2008/11/...
—
occulus
博客真的很好,我一直都在看它)))
—
superM 2012年
@superM这与旅行推销员非常相似(每个字符串都包含一个城市,且城市之间的成本=一些数字重叠)
—
棘手的怪胎2012年
@ratchet怪胎,这是_如果城市中有更多普通字母,您可以在城市之间付出很小的代价,而当他们根本没有任何普通字母时,您可以付出最大的代价
—
superM 2012年