给定一个字符串s,从一包字符串中识别s的最短超序列的最有效方法是什么?此外,s的最后一个字符应与超弦的最后一个字符匹配。
答案 0 :(得分:2)
除非我误解了,否则这个问题肯定在P。
一种天真的方法是:
其中| x |表示x的大小。
您可以组合这些步骤,但无论如何它都是O(| B | * max(| z |))。
答案 1 :(得分:1)
假设行李不经常变化,我会构建一个DAWG并用A *搜索。
答案 2 :(得分:0)
运行包中的每个字符串,使用像KMP这样的快速字符串搜索来检查s
是否是子字符串。检查哪个超弦最短。这是O(Σlength of strings in bag)
。
如果您需要多次搜索,可以为包中的每个字符串构建一个后缀trie,然后合并它们。然后,您可以在O(|s|)
中进行查找。