【发布时间】:2017-11-01 19:32:23
【问题描述】:
我想找到 N 个字符串中最长的公共子序列。我得到了对 2 个字符串使用动态编程的算法,但是如果我将其扩展到 N,它将消耗指数量的内存,因为我需要一个 N 维数组。这不是一个选项。
在一般情况下(90%),几乎所有字符串都是相同的。
如果我尝试将我的 N 个序列分解为 N/2 对,每对 2 个字符串,为每对分别运行 2 个字符串的 LCS,我将有 N/2 个子序列。我可以删除重复项并重复此过程,直到我只有一个子序列,这是输入中所有字符串共有的。
我有什么遗漏的吗?它看起来不像 N-hard 问题的解决方案......
我知道每对字符串对 LCS 的每次调用都可能有多个子序列作为解决方案,但如果我只将其中一个子序列用作下一次调用中的输入,那么可能是我的最后一个子序列-sequence 不是最长的,但我有一些可能适合我的需求。
如果我尝试对一对使用所有可能的解决方案,然后将其与另一对的所有可能解决方案结合起来(它们中的每一个也可能有多个),我可能会以指数时间结束。我说的对吗?
【问题讨论】: