String O(n^2)(或O(n^2lg(n))?)算法,用于计算两个'的最长公共子序列(LCS);环&x27;一串
这是在今天的太平洋西北地区编程竞赛中出现的一个问题,在比赛中没有人解决它。这是问题B,完整的问题集在这里:。有一个著名的O(n^2)算法使用动态规划求解两个字符串的LCS。但是当这些弦延伸到环的时候我不知道 注意,它是子序列而不是子字符串,因此元素不需要彼此相邻String O(n^2)(或O(n^2lg(n))?)算法,用于计算两个'的最长公共子序列(LCS);环&x27;一串,string,algorithm,dynamic-programming,String,Algorithm,Dynamic Programming,这是在今天的太平洋西北地区编程竞赛中出现的一个问题,在比赛中没有人解决它。这是问题B,完整的问题集在这里:。有一个著名的O(n^2)算法使用动态规划求解两个字符串的LCS。但是当这些弦延伸到环的时候我不知道 注意,它是子序列而不是子字符串,因此元素不需要彼此相邻 另外,它可能不是O(n^2),而是O(n^2lgn)或者可以在普通计算机上在5秒钟内给出结果的东西。您可以将第一个和第二个字符串加倍,然后使用普通方法,然后将位置环绕。搜索web,这似乎在论文的第4.3节“增量字符串比较”中有所介绍,由
另外,它可能不是O(n^2),而是O(n^2lgn)或者可以在普通计算机上在5秒钟内给出结果的东西。您可以将第一个和第二个字符串加倍,然后使用普通方法,然后将位置环绕。搜索web,这似乎在论文的第4.3节“增量字符串比较”中有所介绍,由Landau,Myers和Schmidt以O(ne)
对这个问题有一点兴趣的是,N的前几个值的值Lc(N)/N将为Chvatal-Sankoff常数提供良好的界限(比L(N)/N好得多)。继麦克道拉的回答之后,我想指出O(N^2 lg N)Maes论文中提出的解决方案是竞赛问题的预期解决方案(检查)。Landau等人论文中的O(ne)解不适用于此问题,因为该论文针对的是编辑距离,而不是LCS。特别是,仅当编辑操作(添加、删除、替换)都具有单位(1、1、1)成本时,循环编辑距离的解决方案才适用。另一方面,LCS相当于使用(添加、删除、替换)成本(1、1、2)编辑距离。这两者并不等同;例如,考虑输入字符串“ABC”和“CXY”(对于非循环情况,同样可以构造循环反例)。两个字符串的LCS为“C”,但最小单位成本编辑是依次替换每个字符 在110行但没有复杂数据结构的情况下,Maes的解决方案朝着在竞赛环境中合理实现的高端方向发展。即使Landau等人的解决方案可以适用于处理循环LCS,但数据结构的复杂性使其在竞赛环境中不可行
最后但并非最不重要的一点是,我想指出,对于CLC确实存在一个O(n^2)解决方案,如下所述:60行,没有复杂的数据结构,只有2个数组,这个解决方案在竞赛设置中实现是非常合理的。不过,找到解决方案可能是另一回事。我起初尝试过,但如果原始字符串重叠,那么当您将它们加倍时,LCS也会加倍。这可能会变得复杂。。。。我还尝试计算一个字符串的LCS和另一个字符串的双精度LCS,但它具有相似的特性problem@dementrock:我不明白,您能显示示例字符串吗?例如(如问题中所示),“megamind”和“mindmega”,当您简单地将其加倍时,您将得到“megamindmegamind”和“mindmegamindmega”,在这种情况下,LCS的长度为l2!(“megamindmega”)(我没有仔细计算它,但它仍然是一个反例)对于我尝试的方法,使用“metrocity”和“kryptonite”(我忘了提到字符串也可以还原,但这对算法没有多大影响)。将其中一个值加倍,例如“metrocity”和“etinotpyrk”,在这种情况下,LCS的长度大于或等于6(“etroty”),但原始LCS是“etoty”@Dani。这是一个子序列,而不是子串。所以它是B[A]CD[B]A[CD]你确定存在O(n^2)算法吗?他们说“大”箱子只有1500个字母。1500^3大约只有33亿美元,在一台速度很快的机器上不需要太长时间。。。但是O(n^3)是一种trivial@Nemo嗯