-
25-09-2019 - |
题
考虑2个序列X [1..M]和Y [1..N]。所述记忆化算法将计算在时间为O的LCS(m * n个)。有没有更好的算法来找出LCS WRT时间?我想记忆化斜做可以给我们O(分钟(M,N))的时间复杂度。
解决方案
基因迈尔斯于1986年提出了一个非常漂亮的算法对于这一点,说明如下:的的O(ND)差分算法及其版本。
此算法需要时间正比于序列之间的编辑距离,所以它的速度要快得多,当差是小的。它通过遍历所有可能的编辑距离,从0开始,直到它找到它的编辑脚本(在某些方面的双重的LCS)的可构建的距离。这意味着,可以通过“拯救早”如果该差增大高于某个阈值,这有时是方便的。
相信这种算法仍在许多diff
实现中使用。
其他提示
如果你知道先验的上界的最大大小ķ你所关心的,可以早期通过添加在内部循环的额外的检查强制LCS算法退出。这意味着然后当ķ<<分钟(M,N)可以尽管你正在做的LCS的事实得到小的运行时间。
是的,我们能比订单O(m * n个)创建一个更好的算法--- 即O(分钟(M,N))。找到一个长度..... 只是比较对角线elements.and每当增量完成假设在C发生[2,2]然后从C [2,2 ++]和c递增的所有值[2 ++,2]通过1 .. 并继续直到C [M,M] ..(假设米
不隶属于 StackOverflow