【发布时间】:2014-01-02 06:52:21
【问题描述】:
我正在尝试跨多个序列查找最长的公共子字符串 (LCS)。
CPAN 上有许多模块为 2 个序列实现 LCS 算法,例如 Algorithm::Diff 和 String::LCSS_XS,但我很难将它们扩展到工作多于 2 个序列,因为跨多个序列的 LCS 不一定是任意两个序列之间的 LCS。
值得注意的是,尽管有它的名字,Algorith::MLCS 实际上并不返回 LCS,而是返回多个数组的所有公共元素(也是非连续的)。我的印象是它被设计破坏了,但我可能错了。
Algorithm::Diff和Algorith::MLCS解决的是最长公共子序列问题,而不是最长公共子串之一。
有没有明显的方法来扩展 n=2 算法,还是我必须实现我的版本?如果是,怎么做?
谢谢。
【问题讨论】:
-
我不是专家,但我怀疑 Algorithm::MLCS 并非“被设计破坏”。相反,它正在解决一个不同的问题。它处理最长的常见子序列问题。如果我理解您的问题,那么您正在处理最长的常见 substring 问题。我认为 Algorithm::Diff 是一样的:它处理子序列问题。
-
是的,你是对的,我没明白 substring 和 subsequence 之间有区别!