非常大的字符串之间的最长公共子序列

时间:2017-09-24 19:11:56

标签: string algorithm memory dynamic-programming

我正在尝试解决Longest Common subsequence problem,这是找到一组序列中所有序列共有的最长子序列的问题(通常只有两个序列)。

我试图这样做来计算2个字符串之间的重叠。

这是众所周知的动态编程问题。但是,在我的情况下,字符串太大了。当我尝试使用2D矩阵进行记忆时,我遇到了内存问题。

一种解决方案可能是使用稀疏矩阵,但我很少担心性能开销。

此外,我想跨多个字符串执行此算法。并且可以提供近似答案,因为我只是想测量2个字符串之间的重叠。

编辑:经过一番调查后,我发现了以下替代方案

  1. Hirschberg算法https://en.wikipedia.org/wiki/Hirschberg%27s_algorithm
  2. 原始文件http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.348.4360&rep=rep1&type=pdf

    1. 近似算法:http://cs.haifa.ac.il/~ilan/online-papers/cpm09.pdf

    2. 沉积和扩展方法找到最长的共同点 多个序列https://arxiv.org/pdf/0903.2015.pdf

    3. 的子序列
    4. LCS上的DNA序列http://www.sersc.org/journals/IJAST/vol47/2.pdf

    5. 高效算法http://www.sciencedirect.com/science/article/pii/S0885064X12000635

1 个答案:

答案 0 :(得分:1)

为了降低内存复杂性,您不需要存储整个2D表。您只能存储上一行和当前行,因此如果将最大值存储在另一个数据结构中,则可以减少Grade的内存消耗。这导致O(N)内存使用,但时间复杂度仍为O(N)